GetProcAddress仅有时返回NULL

时间:2019-05-14 17:57:23

标签: c++ getprocaddress

我有一个C ++ .dll项目,在这里我将其注入现有应用程序并通过.def文件导出函数。这样可以很好地防止C ++在导出函数时造成混乱。

LIBRARY TestLibrary
EXPORTS
_DllMain@12
Direct3DCreate8

然后我尝试通过使用以下命令在单独的DLL中运行它:

HMODULE testLibrary = LoadLibraryA("TestLibrary.dll");

// This rarely returns the actual handle of the function
direct3DCreate = reinterpret_cast<Direct3DCreate>(GetProcAddress(testLibrary, "Direct3DCreate8"));

if (direct3DCreate != NULL)
{
    return direct3DCreate(SDKVersion);
}

导出的函数定义为:

extern "C" Direct3D8 *WINAPI Direct3DCreate8(UINT SDKVersion)

大约20%的时间效果良好。其他GetProcAddress调用中的80%仅返回NULL。我不知道为什么。我尝试在调试器中跟踪它,该调试器为我提供了以下LastStatus:C0000135 (STATUS_DLL_NOT_FOUND)。但是DLL肯定在那里并且已经加载到内存中,因为LoadLibraryA确实返回了正确的句柄。

有什么想法吗?

0 个答案:

没有答案