GetModuleHandle如何在Visual c + +中工作

时间:2011-07-18 05:00:04

标签: c++ winapi visual-c++

我是c ++的新手,即使我知道该文件存在,此代码也始终返回NULL:

HMODULE hModule = GetModuleHandle(TEXT("C:\\Users\\Steve\\Desktop\\stub.exe"));

有趣的是,如果我将stub.exe复制到C:\ Windows \ system32,它会找到包含以下代码的模块:

HMODULE hModule = GetModuleHandle(TEXT("stub.exe"));

我错过了一些非常基本的东西吗?

3 个答案:

答案 0 :(得分:7)

您只能在GetModuleHandle(L"C:\\Users\\Steve\\Desktop\\stub.exe");运行时致电C:\Users\Steve\Desktop\stub.exe

但一般情况下,您不会为您的EXE名称调用GetModuleHandle。由于每个进程只有一个EXE,因此只需调用GetModuleHandle(0)即可。

答案 1 :(得分:3)

首先,GetModuleHandle要求您事先将dll加载到进程中。

Windows具有用于搜索模块的特定路径,以及一些强制“安全”dll加载的开关,如果您希望扩展,可能需要查看SetDllDirectoryAddDllDirectory搜索的位置。有关Windows如何搜索二进制文件的说明,请参阅this

答案 2 :(得分:0)

以下是MSDN的引用:

  

GetModuleHandle函数

     

检索指定模块的模块句柄。该模块必须已由调用进程加载。

这意味着您必须先使用LoadLibrary加载模块。 System32可能会得到特殊处理,但你真的不应该在那里复制任何东西。该文件夹严格用于操作系统的使用。