Dll问题求救(100分)

  • 主题发起人 主题发起人 Piscesking
  • 开始时间 开始时间
P

Piscesking

Unregistered / Unconfirmed
GUEST, unregistred user!
现在遇到一个问题,我在dll程序中创建了form,参数传出form.hadle.
但是主程序调用以后,Application.ComponentCount数量却没有增加,找不到这个dll创建的form,但是dll中用form.show又是能show出来的。
主程序:
procedure TFep_main_Frm.ShowWindow(hHandle: Integer);
var
i:integer;
hh:HWND;
begin
hh:=hHandle;
for i:=0 to Application.ComponentCount-1 do
begin
showmessage(application.Components.ClassName);
if Application.Components is TForm then
begin
if TForm(Application.Components).HANDLE=hh then
begin
ShowTshWindow(TForm(Application.Components),True)
end;
end;
end;
end;
 
你要保留宿主程序的form,dll里面创建的form和宿主程序不同所以你通过application是遍历不到的,
 
赞同iamyourneed的说法
 
我现在dll中的参数有application.mainform参数的。可以说具体一点吗?
dll:
procedure RunGWGF(DataCount:integer;CZLX:integer;soTempEX:TSelectObjectEX;
Sender:TObject;var hHandle:integer);stdcall;
begin
Application.CreateForm(TForm1, frm1);
hHandle:=frm1.Handle;
end;
这里的sender就是传入的mainform.
 
主程序的Application.Handle有没有传到DLL里面去?
DLL创建窗口的时候是怎么创建的?
最好把Dll的入口函数和窗口的创建部分代码贴上来。
 
现在问题比较急,大家说清楚一点,谢谢
 
这个是 dll调用
procedure RunDll(sFunName:string;sDllName:string;DataCount:integer;CZLX:integer;soTempEX:TSelectObjectEX;Sender:TObject;var hHandle:integer);
var
hHHandle:THandle;
pFun:TProc;
crTemp:TCursor;
begin
crTemp:=Screen.Cursor;
Screen.Cursor:=crAppStart;
// hHandle:=0;
try
hHHandle:= LoadLibrary(Pchar(sDllName));
if hHHandle >0 then
begin
pFun := TProc(GetProcAddress(hHHandle,Pchar(sFunName)));
try
pFun(DataCount,CZLX,soTempEX,application.MainForm,hHandle) ;
except
on E:Exception do
gShowErrorMessage('动态链接库'+sDLLName+'中函数'+sFunName+'调用失败!错误内容为:'+E.Message)
end;
end
else
gShowErrorMessage('动态链接库'+sDLLName+'无法找到或已经损坏!错误码:'+inttostr(GetLastError));
Except
on E:Exception do
gShowErrorMessage('动态链接库'+sDLLName+'调用失败!错误内容为:'+E.Message);
end;
//FreeLibrary(hHandle);
Screen.Cursor:=crTemp;
end;
 
dll入口:
RunDll('RunGWGF','Prj_Fga_GWGF.dll',1,20,SelectObjectInfo,Fep_main_Frm,hHandle);
ShowWindow(hHandle, 0);
 
还有一种办法。内存共享
 
谢谢大家,现在我采用带包编译,builde with runtime packages就可以了
 
后退
顶部