使用#import 命令时如何创建 IDiaDataSource 的实例?
How to create an instance of IDiaDataSource when using the #import command?
我正在尝试在 msdia140.dll
上使用 #import
命令,该命令用于 Debug Interface Access SDK。
是的,我知道接口已经有它的头文件,但我想使用智能 COM 指针,因此使用 #import
命令。
我使用的导入命令是:
#import "bin/msdia140.dll" \
rename("virtual", "Virtual")\
exclude( \
"IStream" \
, "ISequentialStream" \
, "_LARGE_INTEGER" \
, "_ULARGE_INTEGER" \
, "tagSTATSTG" \
, "_FILETIME" \
, "IEnumUnknown")
重命名是因为关键字冲突,排除是为了消除导入名称已存在的类型的警告。
在 ...App::InitInstance()
函数中,我调用了 CoInitialize(NULL);
,在 ...App::ExitInstance()
中,我调用了 CoUninitialize();
.
现在我正在尝试做等同于:
CComPtr<IDiaDataSource> pSource;
CoCreateInstance( CLSID_DiaSource,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof( IDiaDataSource ),
(void **) &pSource);
按照说明 here 中所述,但没有成功。我试过的命令是:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
但智能指针保持为NULL
。我做错了什么?
查看 CreateInstance() 的 return 值。它会告诉你问题所在,或者至少是第一个问题。
我立即看到的一个问题是:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
应该是:
Dia2Lib::IDiaDataSourcePtr dataSource;
HRESULT hr = dataSource.CreateInstance(__uuidof(Dia2Lib::DiaSource));
您正在使用接口 ID 而不是 coclass 的 CLSID -- 总是会有问题。
我正在尝试在 msdia140.dll
上使用 #import
命令,该命令用于 Debug Interface Access SDK。
是的,我知道接口已经有它的头文件,但我想使用智能 COM 指针,因此使用 #import
命令。
我使用的导入命令是:
#import "bin/msdia140.dll" \
rename("virtual", "Virtual")\
exclude( \
"IStream" \
, "ISequentialStream" \
, "_LARGE_INTEGER" \
, "_ULARGE_INTEGER" \
, "tagSTATSTG" \
, "_FILETIME" \
, "IEnumUnknown")
重命名是因为关键字冲突,排除是为了消除导入名称已存在的类型的警告。
在 ...App::InitInstance()
函数中,我调用了 CoInitialize(NULL);
,在 ...App::ExitInstance()
中,我调用了 CoUninitialize();
.
现在我正在尝试做等同于:
CComPtr<IDiaDataSource> pSource;
CoCreateInstance( CLSID_DiaSource,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof( IDiaDataSource ),
(void **) &pSource);
按照说明 here 中所述,但没有成功。我试过的命令是:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
但智能指针保持为NULL
。我做错了什么?
查看 CreateInstance() 的 return 值。它会告诉你问题所在,或者至少是第一个问题。
我立即看到的一个问题是:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
应该是:
Dia2Lib::IDiaDataSourcePtr dataSource;
HRESULT hr = dataSource.CreateInstance(__uuidof(Dia2Lib::DiaSource));
您正在使用接口 ID 而不是 coclass 的 CLSID -- 总是会有问题。