dll에 대해 폼을 만들었는데 AccessViolation 에러가 납니다.
자꾸 포인터 부분에서요...
부탁드립니다. 제가 델초보라서요. 아무리 애를 써두 안되서요.
고수님들 부탁드립니다.
이것에 대해서 설명하자면 childMDI에서 변수에 값을 입력하여 DLL의 MDIChild에서
그 값의 포인터를 참조하여 값을 보여주려구 합니다...
부탁합니다.. 급해요....................................
//---------------------------- Dll입니다.---------------------------------
library dbmdc;
uses
Windows,
Classes,
Controls,
Forms,
URecordForm in 'URecordForm.pas' {RecordForm};
procedure CreateChild(AParentApplication: TApplication; ADBRec: pDBRec); export; stdcall;
begin
Application:= AParentApplication;
with TRecordForm.Create(Application) do
begin
ParentApplication:= AParentApplication;
Label1.Caption := '제가 바로 MDI폼이예요.....';
Label2.Caption := ADBRec^.aName ;
Show;
end;
end;
procedure DLLUnloadProc(Reason: Integer); register;
begin
if Reason = DLL_PROCESS_DETACH then Application := DllApplication;
end;
exports
CreateChild;
begin
DllApplication := Application;
DLLProc := @DLLUnloadProc;
end.
//-------------------------------------------------------------------------
//----------------선언참조URecordForm 이용폼입니다.---------------------
unit URecordForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;
type
TRecordForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
RecordForm: TRecordForm;
ParentApplication: TApplication;
end;
type
pDBRec = ^TDBRec;
TDBRec = record
aName, bName, cName:array[0..10] of char;
end;
var
DllApplication: TApplication;
implementation
{$R *.DFM}
procedure TRecordForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RecordForm := nil;
Action := CaFree;
end;
//-----------------------------------------------------------------------
//---------------------------- main입니다.------------------------------
//선언부 생략
type
pDBRec = ^TDBRec;
TDBRec = record
aName, bName, cName:array[0..10] of char;
end;
type
TProc = procedure(AParentApplication: TApplication; ADBRec: pDBRec); stdcall;
//----------이부분입니다.
procedure TForm1.N5Click(Sender: TObject);
var
FDBRec: pDBRec;
RDBRec:TDBRec;
DLLHandle: THandle;
Proc: TProc;
begin
FDBRec^.aName := '000';
FDBRec^.bName := '111';
FDBRec^.cName := '222';
DLLHandle := LoadLibrary( 'dbmdc' );
if DLLHandle> 0 then
begin
Proc := GetProcAddress( DLLHandle, 'CreateChild' );
Proc(Application, FDBRec); -->요기서 에러 발생
end
else
Application.MessageBox('Not Found Dll','확인',48);
end;
end.