调用dll时出错!(100分)

  • 主题发起人 主题发起人 jh_muse
  • 开始时间 开始时间
J

jh_muse

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个dll名字为testdll1,里面包含一个子窗口,主程序为testmain里面包含主窗口,在调用时报如下两个错误:

Project testMain.exe raised exception class EInvalidOperation with message 'Cannot make a visible window modal'.Process stopped.Use Step or Run to continue.

Exception EInvalidOperation in module testdll1.dll at 0005BF31.

我将调用和被调程序贴出来

dll中的被调程序
procedure jh(mainform:Tform);stdcall;
var
ptr:PLongInt;
form1:tfrm_carinfo;
begin
ptr:=@(application.MainForm);
ptr^:=longint(mainform);
form1:=tfrm_carinfo.Create(mainform);
form1.ShowModal; //错误出现在这句
end;

主程序中的调用程序
procedure Tfrm_mainOPT.menu_CarInfoClick(Sender: TObject);
type
mypointer=procedure(form:TForm);stdcall;
var
showform:mypointer;
Moudel: THandle;
begin
moudel:=Loadlibrary('testdll1.dll');
if Moudel > 32 then
begin
showform:= GetProcAddress(moudel, 'jh');
showform(application.MainForm);
FreeLibrary(moudel);
end;
end;
 
因为tfrm_carinfo是mdichild窗口
 
能说明白一点吗?

我就是想把tfrm_carinfo做成mdichild窗口。
 
一定要用这个方法吗?
 
我这是在网上看的例子,如果有别的方法也可以,能不能给个例子?

只要符合下列要求就可以
1。exe文件中的form为主窗口。
2。dll文件中的form为子窗口。
3。能否给出exe和dll中的调用与被调程序
 
呵呵,试试这样
form1:=tfrm_carinfo.Create(mainform);
form1.hide;
form1.ShowModal;

mdichild好像一创建就显示了
 
如果是mdichild那又何必showmodal。
 
现在是这样,如果我将dll中的form。formstyle设成fsMDIChild,就回报上面的错误

不知谁有类似的并且调试好的例子可以发给我学习学习!谢谢!
 
由于我dll中的form设成了fsMDIChild,所以我把dll中的form1.ShowModal去掉,程序不报错了,可是被调dll中的form总是一闪就关闭了,于是我又将exe中的FreeLibrary(moudel)去掉,现在程序完全没有错误了,但是我不知道最后dll是否被解掉了,那位可以给我解释一下,如果没有被解掉,我将怎么改?
 
有没有人可以回答?
 
后退
顶部