小弟初学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();请众兄弟指点一二,不胜感激~~
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();请众兄弟指点一二,不胜感激~~
using namespace std;
#include <atlbase.h>
#include "ATLDemo.h"void main()
{
::CoInitialize(NULL);
{
CComPtr<IHelloATL> pHelloATL;
pHelloATL.CoCreateInstance(CLSID_HelloATL);
}//加上括号,保证pHelloATL destructor在::CoUninitialize();之前调用
::CoUninitialize();
}