我在我的C ++程序中使用MFC(使用Visual Studio 2008)。我必须在我的程序开始时调用AfxGetInstanceHandle()。
此功能触发断点:
AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
ASSERT语句失败。在尝试访问afxCurrentInstanceHandle
之前,是否需要执行某些特殊操作才能初始化int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
AfxGetInstanceHandle();
return 0;
}
?
PS:我在共享dll中使用MFC。
修改
我的代码是这样的:
InstanceHandle
我想使用CComModule
来初始化{{1}},然后用它来操作com对象。
答案 0 :(得分:11)
我用MFC制作了一个控制台应用程序并得到了消息。我找到了解决方案,你需要在主序(_tmain等)的开头有一个“序幕”。
int main(int args, char* argv[]) //, char *envp[])
{
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
return 1;
}
AfxGetInstanceHandle();
// TODO: code your application's behavior here.
...
答案 1 :(得分:8)
使用:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
致电之前:
AfxGetInstanceHandle();
答案 2 :(得分:5)
如果您为DLL /应用程序混合使用unicode / mbcs或debug / release构建模式,则会发生这种情况。
答案 3 :(得分:2)
如果您使用的是MFC,则不应提供main,wmain,_tmain或WinMain - MFC提供了自己的入口点。将初始化代码放在CWinApp派生类的InitInstance中。如果没有CWinApp派生类,则表示尚未正确创建项目 - 使用Visual Studio向导创建MFC应用程序。