很难非高手勿进¥¥¥¥delphi 调用dll中form 的执行顺序与存储过程的使用问题¥¥¥¥

AlickYue 2006-08-17 09:58:22
extern "C" __declspec(dllexport) int __stdcall showBBCGXQMX();
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
CoInitialize(NULL);
break;
case DLL_PROCESS_DETACH:
CoUninitialize();
break;
}
return 1;

return 1;
}
//-----------------------C++中调用form的函数----------------------------------------------------
int __stdcall showBBCGXQMX()
{
TBBCGXQMXForm1 * BBCGXQMXForm1;
Application->CreateForm(__classid(TBBCGXQMXForm1), &BBCGXQMXForm1);
//BBCGXQMXForm1->ADOConnection1->Connected =1;
BBCGXQMXForm1->ShowModal() ;
return 1;

}
//------------------delphi调用部分
var
InvMoudle:Thandle;
conStr:string;
tes:integer;
begin

begin
//BB_BPShiJianForm1.ShowModal ;
InvMoudle:=LoadLibrary('BBCGXQMXdllProject1.dll');

if invMoudle<>0 then
begin
Show_KuCunTZ:=GetProcAddress(InvMoudle,'showBBCGXQMX');
Show_KuCunTZ;
showMessage('hello');

end else
begin
showMessage('您没有安装相应的模块!');

end;

end;
--------------------
我的问题是:
1。 为什么我在dll中明明用的BBCGXQMXForm1->ShowModal() ; 为什么程序执行起来却不是modal
模式。
2。为什么delphi调用的Show_KuCunTZ; 后直接就跑到下一条语句了showMessage('hello'); 而得delphi 自己写的相同代码却是关了那个dll中的form 后再执行下一条呢??
3。 为什么我关闭dll中的form的时候系统就报错,而且一执行存储过程就报错呢??




...全文
464 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongfancheng 2007-03-26
  • 打赏
  • 举报
回复
up
kejian 2007-03-26
  • 打赏
  • 举报
回复
zaza_bbface 正解!!

必须传递调用程序的application.handle.
所以ShowModal的时候dll的application.handle变为桌面.
也就解释了为什么调用程序不等窗口关闭才往下执行.
rcyboom 2007-03-26
  • 打赏
  • 举报
回复
必须传递调用程序的application.handle.
所以ShowModal的时候dll的application.handle变为桌面.
也就解释了为什么调用程序不等窗口关闭才往下执行.
----------
经典,up!
zaza_bbface 2007-02-05
  • 打赏
  • 举报
回复
试试这样行不行,
showBBCGXQMX()方法多传个application.handle参数
在dll中,
重新指定其application.handle

还有,你的Show_KuCunTZ方法类型有没有加上stdcall?
lxtnt 2007-02-05
  • 打赏
  • 举报
回复
int __stdcall showBBCGXQMX();
在DELPHI中定要调用函数时一定要与定义的函数的参数调用顺序一致.
你的函数定义呢....你没贴出!
Var
Show_KuCunTZ:Function():Integer; Stdcall;

@Show_KuCunTZ:=GetProcAddress(InvMoudle,'showBBCGXQMX');
关闭你的DLL时,当然会调用你的以下事件:
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
你确定这里没问题吗?
fsyybo 2007-01-31
  • 打赏
  • 举报
回复
学习
hongqi162 2007-01-31
  • 打赏
  • 举报
回复
showmodal的问题就是一楼说的那样

GetProcAddress返回的是地址函数地址, 你的Show_KuCunTZ在那里定义的?
yousite1 2007-01-31
  • 打赏
  • 举报
回复
lz技术有点牛X
僵哥 2006-08-17
  • 打赏
  • 举报
回复
先声明,偶不是高手^_^

极有可能存在的一个问题就是Delphi和CBuilder所使用的VCL不是同一个版本.从而导致CBuilder所写的DLL当中的Application对象与Delphi当中不是同一个,甚至不存在.此时去ShowModal就会产生问题,具体的楼主可以参考一下VCL Source当中关于ShowModal部分的代码,另外添加调试信息,看一下DLL当中所使用的Application(可能不存在),与Delphi当中所使用的是否同一个东西.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧