描述:
atl1.dll 是我用 atl 做的一个库,只有一个 hello 方法,
///////////////////////////////////////////////////////////
// 开始
#include "stdio.h"
#include "windows.h"
#import "D:\\ccc\\atl1\\Debug\\atl1.dll" no_namespace rename("EOF","rsEOF")
_COM_SMARTPTR_TYPEDEF(IJkk, __uuidof(IJkk));
void main()
{
::CoInitialize(NULL);
IJkkPtr aaa; //
HRESULT hr = S_OK;
hr = aaa.CreateInstance(__uuidof(IJkk)); // 这句有问题吗?
if(hr== S_OK)
{
aaa->hello(); //
printf(" hello atl \n");
}
else
{
printf(" fail \n"); // 总是执行这句
}
::CoUninitialize();
}
// 结束
//////////////////////////////////////////////////////////////
上面的代码有问题吗,各位给指点指点,谢谢
解决方案1:
初始化指针为NULL。
解决方案2: hr = aaa.CreateInstance(__uuidof(IJkk)); // 这句有问题吗?
有问题!!!
IJkkPtr aaa = NULL; //
hr = aaa.CreateInstance(__uuidof(CJkk)); // 参数应该是clsid
在程序要退出时:aaa = NULL;
void main()
{
::CoInitialize(NULL);
{ // 补充
IJkkPtr aaa; //
HRESULT hr = S_OK;
hr = aaa.CreateInstance(__uuidof(IJkk)); // 这句有问题吗?
if(hr== S_OK)
{
aaa->hello(); //
printf(" hello atl \n");
}
else
{
printf(" fail \n"); // 总是执行这句
}
} //补充
::CoUninitialize();
}
HRESULT hr;
hr = aaa.CreateInstance(__uuidof(IJkk));
if(SUCCESSDED(hr))
{
....
}