如何知道DLL文件已经调入(100分)

  • 主题发起人 主题发起人 笑西风
  • 开始时间 开始时间

笑西风

Unregistered / Unconfirmed
GUEST, unregistred user!
&nbsp; &nbsp;我的程序用CreateProcess调入另一个程序A.exe,A在进入时会调用B.dll中的服务。<br>&nbsp; &nbsp; 我在程序中如何才能知道B.dll已经调入内存?并获的hModule.<br>
 
一般说来不用管dll是否调入,因为如果索要的dll没有调入的话,<br>windows会自动调入的。
 
&nbsp; &nbsp;我并不调用B.dll中的功能,只是通过知道B.dll的调入,明确A.exe运行到某个程度。
 
GetModuleHandle('B.DLL');
 
说明:<br>&nbsp; hDLL := GetModuleHandle('B.DLL');<br>&nbsp; FoundDLL := hDLL &lt;&gt; 0;<br>&nbsp; if FoundDLL then<br>&nbsp; &nbsp; MessageDlg('Loaded!',mtInformation,[mbOk],0)<br>&nbsp; else<br>&nbsp; &nbsp; MessageDlg('Not found!',mtInformation,[mbOk],0);<br>
 
哎呀,忘了,当初刚学dll的时候就使用的这个呀!傻!
 
&nbsp; &nbsp;利用WINDOWS API ,需要用到的函数是<br>&nbsp; Loadlibrary:用来连接动态库。<br>&nbsp; Getprocaddress: 用来返回动态库中方法和过程的指针。<br>&nbsp; Freelibrary: 用来释放动态库句柄。<br>&nbsp; 一切尽在自己的掌握中!<br>&nbsp; <br>
 
GetModuleHandle查 b.dll 只能在 a.exe 使用,<br><br>如果要在你的第一个程序(调用 CreateProcess 的程序)中知道b.dll的装入<br>1、可以使用CreateProcess中的 DEBUG_PROCESS 属性启动子进程,<br>&nbsp; &nbsp;需要处理debug事件,不过可以知道子进程装入的dll<br>2、使用psapi.dll中的api
 
&nbsp; &nbsp;我开始就试过GetModuleHandle,似乎是得不到正确结果。<br>&nbsp; &nbsp; 我在MSDN中还找到了EnumProcessModules,似乎可以,但又需要<br>Microsoft&amp;reg; Platform Software Development Kit (SDK)。在Delphi<br>中根本找不到声明。即对PSAPI的声明。在机器中更找不到PSAPI.DLL。<br>谁有的话,请发给我。我的E-mail是 xzq@km169.net 。谢谢!<br>&nbsp; &nbsp; 问题先这样结束吧。如果谁有更好的做法,请写信给我,我可以重新<br>开个题目,继续探讨!
 
多人接受答案了。
 
psapi可能只在nt下有用<br>如果你的是nt,安装bcb或者delphi后在winnt/system32下有psapi.dll<br>delphi中uses psapi就有那些api的定义了
 
后退
顶部