私はのコマンドをmsdia140.dll
で使用しようとしています。#importコマンドを使用してIDiaDataSourceのインスタンスを作成する方法は?
はい、私はそこにすでにインターフェイスを持つヘッダーファイルがあることを知っていますが、スマート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();
があります。しかし、成功せず、指示hereで述べたように
CComPtr<IDiaDataSource> pSource;
CoCreateInstance(CLSID_DiaSource,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IDiaDataSource),
(void **) &pSource);
:
今、私はに相当するものをやろうとしています。私が試したコマンドは、
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
ですが、スマートポインタはNULL
のままです。私は間違って何をしていますか?
私は前に 'CLSID_ *'変数を使っていると考えましたが、 'CLSID_ *'変数は定義されていませんでした。 – Adrian
さて、CLSIDを使用する必要があります。それはCLSID _ *と呼ばれていないかもしれません。ちょうどどちらがコクラスであるかを調べてください。次に、__uuidof(Dia2Lib :: DiaDataSource)などのようなものです。 DLLへのパスがある場合は、oleviewを使用して表示します。oleview c:\ path \ to \ msdia140.dll。そこから型ライブラリを見て、コクラスのオブジェクトを見つけることができます。 –
grinsについては、私のコンピュータで検索し、msdia120.dllが見つかりました。コクラスは、DiaSource、DiaSourceAlt、およびDiaStackWalkerです。 __uuidof(Dia2Lib :: DiaSource)を使用するとおそらく動作します。 –