1. @DLLSub := GetProcAddress(HandleCall, 'CreateForm');
红色部分的我想给其传递参数,但不知这个参数如何传递,什么类型2. @DLLSub := GetProcAddress(HandleCall, 'CreateForm');
if Assigned(DLLSub) then
begin
DLLForm := DLLSub(Application, Screen);
end;
FreeLibrary(HandleCall);
调用后在此就立即FreeLibrary释放有没什么问题?
红色部分的我想给其传递参数,但不知这个参数如何传递,什么类型2. @DLLSub := GetProcAddress(HandleCall, 'CreateForm');
if Assigned(DLLSub) then
begin
DLLForm := DLLSub(Application, Screen);
end;
FreeLibrary(HandleCall);
调用后在此就立即FreeLibrary释放有没什么问题?
得到的是指向DLL中的函数的指针即DLL中CreateForm函数指针,传递参数是通过dllsub传递的
2. try
...
@DLLSub := GetProcAddress(HandleCall, 'CreateForm');
if Assigned(DLLSub) then
begin
DLLForm := DLLSub(Application, Screen);
end;
finally
FreeLibrary(HandleCall);
end;
...
begin
...
@DLLSub := GetProcAddress(HandleCall,frm);
...
endprocedure TQG_MAIN.CA_LHExecute(Sender: TObject);
begin
CaDllOpen('CreateForm')
end;这样报错,停留在@DLLSub := GetProcAddress(HandleCall,frm);这行,如果直接用@DLLSub := GetProcAddress(HandleCall, 'CreateForm'); 则OK
,不知如何传递该参数,你可试下
得到的是指向DLL中的函数的指针即DLL中CreateForm函数指针,传递参数是通过dllsub传递的 如何将这个参数动态传进来,请明示2. finally
FreeLibrary(HandleCall); 这个我知道,我调用后不用try ... finally,调用后直接释放会存在什么问题??
但动态调用的DLL窗体(dll中有很多窗体)关闭时,如何马上就释放掉当前DLL的窗体
procedure CallCpl(ProcName:string);
var
applet: TCPLApplet;
hinst: Hmodule;
begin
hinst:= LoadLibrary('inetcpl.cpl');
if hinst<>0 then begin
@applet := GetProcAddress(hinst, PChar(ProcName));
if @applet<> nil then
applet(Form1.Handle, CPL_DBLCLK, 0, 0);
end
else
ShowMessage('invalid handle');
FreeLibrary(hInst);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
CallCpl('CPlApplet');
end;
procedure ShowCreateForm(AHandle: THandle);
var
CreateForm: TCreateForm;
begin
Application.Handle := AHandle;
CreateForm := TCreateForm.Create(Application);
try
CreateForm.ShowModal();
finally
CreateForm.Free();
CreateForm := nil;
end;end;在你exe中
@DLLSub := GetProcAddress(HandleCall, 'ShowCreateForm');
if Assigned(@DLLSub ) then
begin
ShowCreateForm(Application.handle);
end;
FreeLibrary(HandleCall);
http://topic.csdn.net/t/20021022/12/1114409.html