我有一个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确实返回了正确的句柄。
有什么想法吗?