AfxGetInstanceHandle()触发断言失败

时间:2011-03-02 08:23:01

标签: c++ visual-studio com mfc

我在我的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对象。

4 个答案:

答案 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应用程序。