首页
社区
课程
招聘
[求助]dll调用dll窗体碰到的问题。无法解决。已经搞二天了,高手帮帮忙
发表于: 2009-4-3 12:08 6206

[求助]dll调用dll窗体碰到的问题。无法解决。已经搞二天了,高手帮帮忙

2009-4-3 12:08
6206
我的程序是这样。一个.exe主程序。  一个DLL1。一个DLL窗体。

  主程序调用dll1  然后dll1调用dll窗体。

  我原先是静态调用。 一切都OK。但是。当主程序查询数据时。  DLL窗体就在等待状态,无法正常工作。必须等主程序工作结束。

  我现在换成动态。代码是这样。

library dll1;
uses
  Windows,
  Forms,
  Dialogs;

{$R *.res}

type TShowForm=Function (AHandle:THandle;ACaption:Pchar):Boolean;Stdcall;
  var
mainfrm,DllForm:THandle;
ShowForm:TShowForm;
....
....
begin
      mainfrm:=GetModuleHandle(dllform.dll');
    // mainfrm:=application.Handle;
    DllForm:=LoadLibrary(dllform.dll');

        if DllForm <>0 then
        begin
          @ShowForm:=GetProcAddress(DllForm,'ShowForm');
          ShowForm(mainfrm,'dllform');
        end

        end;

用主程序调用。主程序界面出不来。进程里有。但是看不到界面。

如果我把dll1换成.exe
来调用dll窗体。
把      mainfrm:=GetModuleHandle(dllform.dll');换成mainfrm:=application.Handle;

就可以正常出来。这是为什么。。。

还有。我一共有两上程序。一个负责数据修改。一个负责数据调用。都会调用dll1
如果用静态的。结果就是。两个程序打开。DLL窗体就会出来。我只想其中的一个程序能调用到DLL窗体。我应该怎么做。

大家帮帮我吧。我搞了快两天了。查了N多资料都没法解决。

我现在想要的结果就是

其中的一个程序能正常调用DLL1。并由DLL1调用DLL窗体。并且调用的DLL窗体不会因为主程序在处理工作,而去停止等候。(
因为我看别人的DLL窗体可以不受影响。)
我想用dll窗体来通过得到调用程序的PID来选择是否被调用。但是我用静态调用。怎么也取不到PID
如findform      getpid...我都试过了。不知道为什么。如何让DLL来进行判断?

我是参考了加密与解密的DLL劫持。自己试着做。因为水平较低,所以一直碰到问题。但一般GOOGLE都能解决。但这个解决不了。大大们。抽个几分钟帮我讲解一下吧。或者给一个示例代码让我自己去理解也好。我真的是没办法了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
估计要用多线程,你代码是dephi吗?我不会
2009-4-3 12:25
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像不是delphi是vb.
2009-4-3 13:37
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
好像不是vb是delphi
2009-4-3 21:36
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
5
诶 我vb和delphi都不会
2009-4-4 15:04
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
看看这个有帮助没有:http://bbs.pediy.com/showthread.php?t=82182

说句题外话,这也算是使用RAD工具的一种“副作用”吧,因为不直接面对SDK的API,对程序运行的机理理解不透。

很多用Delphi或VB的人,对消息循环没有什么概念,以为一个“窗体(FORM)”创建后就可以用,至于对各种事件的响应函数,是系统自动调用的。

而接触SDK后才知道,所谓“事件驱动”,实际上还必须主动去获取消息并分发消息,也就是所谓的“消息循环”。
2009-4-4 23:24
0
游客
登录 | 注册 方可回帖
返回
//