我在C ++中创建了一个名为MyDLL.dll的DLL。 MyDLL.dll导出外部接口如下: 这是我的dll代码:
CMyAdapter g_DllImp;
BOOL APIENTRY DllMain(
HMODULE hModule,
DWORD dwReason,
LPVOID pReserved
)
{
if (DLL_PROCESS_ATTACH == dwReasonForCall)
g_DllImp.m_hModule = hModule;
else if (DLL_PROCESS_DETACH == dwReasonForCall)
g_DllImp.m_hModule = NULL;
return TRUE;
}
__declspec(dllexport) HRESULT GetVersion(
tVersion* pVersion
)
{
return g_DllImp.GetApiVersion(
pVersion);
}
以下是主应用程序的示例:
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE module = LoadLibrary(L"MyDLL.dll");
....
// call the interface of MyDLL.dll
GetVersion(&pVersion);
return 0;
}
不幸的是,我的主应用程序由于未知原因而崩溃。但根据Dump Crash File,崩溃是MyDLL被卸载:
0289cc24 52e4577e <Unloaded_MyDLL.dll>+0x15728
我必须使用代码来捕获异常:
__try{}
__except(EXCEPTION_EXECUTE_HANDLER)
我的问题是:
我应该在MyDLL界面或主应用程序中使用__try {} __except()吗? 哪一个更好?
你能帮帮我吗? 在此先感谢您的支持。答案 0 :(得分:0)
也许您没有成功加载dll,在使用之前必须确保DLL的模块符合条件。
答案 1 :(得分:0)
这不是你的DLL的责任。 DLL的所有用户都有责任匹配LoadLibrary
和FreeLibrary
个来电。
要调试损坏的可执行文件,请尝试使用Dependency Walker。