描述:
我直接运行这个客户段的程序:
#include "stdafx.h"
#include <iostream>
#include <objbase.h>
#include <atlbase.h>
#include <atlcomcli.h>
#include "../AVICOM/AVICOM.h"
#include "../AVICOM/AVICOM_i.c"
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT handle9=CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
CComPtr<IAVLink> p1;
HRESULT handle1=CoCreateInstance(CLSID_AVLink,NULL,CLSCTX_INPROC_SERVER,IID_IAVLink,(void**)&p1);
CoUninitialize();
return 0;
}
就产生中断的问题
typedef T _PtrClass;
~CComPtrBase() throw()
{
if (p)
p->Release();//中断
}
是怎么回事?
解决方案1:
由于你使用了CComPtr,它会在推出作用域之前自动Release接口,所以在上面的main函数中,Release会发生在CoUninitialize之后。这肯定是错误的。所以你可以在CoInitialize和CoUninitialize之间加上一对 { },
CoInitialize();
{
CComPtr<IAVLink> p;
...
}
CoUninitialize();