小弟初学ATL,写了个小小的COM组件,又写了个小小的客户端,ATL很不给面子,crash了~~~~~~~~#include <iostream>
using namespace std;
#include <atlbase.h>
#include "ATLDemo.h"void main()
{
::CoInitialize(NULL);
CComPtr<IHelloATL> pHelloATL;
pHelloATL.CoCreateInstance(CLSID_HelloATL);
::CoUninitialize();
}看,多简单的客户端啊,莫名其妙地就Crash了,告诉我“Unhandled exception in HelloATL.exe: 0x00000005: Access Violation”。说我非法访问,我靠,我哪有啊,我这刚刚才初始化完啊。错误代码直指
CComPtr::~CComPtr()
{
    if(p)
    {
        p->Release();
    }
}
百思不得其解  :(但是将代码换成下面的,就完全可以运行,真是奇怪:
::CoInitialize(NULL);
IHelloATL *pHelloATL = NULL;
HRESULT h = CoCreateInstance( CLSID_HelloATL, NULL, CLSCTX_INPROC_SERVER, IID_IHelloATL, (void**) &pHelloATL); pHelloATL->Release(); ::CoUninitialize();请众兄弟指点一二,不胜感激~~

解决方案 »

  1.   

    #include <iostream>
    using namespace std;
    #include <atlbase.h>
    #include "ATLDemo.h"void main()
    {
    ::CoInitialize(NULL);
    {
    CComPtr<IHelloATL> pHelloATL;
    pHelloATL.CoCreateInstance(CLSID_HelloATL);
    }//加上括号,保证pHelloATL destructor在::CoUninitialize();之前调用
    ::CoUninitialize();
    }
      

  2.   

    哇,果然是这问题,这是不是VC6的BUG?呵呵,管它呢,分还是要给的~`~~~
      

  3.   

    晕倒,这是你的bug,不是vc的bug