私は以下のCOMタイプを持っています:Project
,ContainerItem
およびNode
です。 Project
には、ContainerItem
を受け入れるAppend
関数を持つコレクションプロパティがあります。 C#のでC++でのCOMタイプのキャスト
は、タイプライブラリを使用して、私は予想通りAppend
機能とライブラリの作品にNode
オブジェクトを送信することができます
var prj = new Project();
var node = new Node();
prj.collection.Append(node);
は、C++では、私はこれはC#は何をしていたかで期待して、直接ポインタのキャストを試してみました、しかし、それはエラーで終わる:
ProjectPtr prj;
prj.CreateInstance(__uuidof(Project));
NodePtr node;
node.CreateInstance(__uuidof(Node));
prj->collection->Append((ContainerItem**)&node.GetInterfacePtr());
これらのタイプのCOMポインタキャストは、C++で具体的な方法がありますか?私は何が欠けていますか? @HansPassantは、コメントと同じように
CスタイルのキャストはCOMインターフェイスでは有効ではないため、QueryInterface()を使用する必要があります。 C#は自動的にそれを行いますが、C++でそれを自分で行う必要があります。 –
'Append'が' ContainerItem ** 'をパラメータとしてとることはほとんどありません。それは意味をなさないでしょう。 'Append'の宣言は何ですか? 'Node'と' ContainerItem'の関係は何ですか? –
@IgorTandetnik定義はContainer :: Append(ContainerItem **、long *)です.2番目のパラメータは途中でnullになることがあります。コンパイラがCOM DLLから作成する.tliファイルには表現されていないため、NodeとContainerItemの関係はわかりません。 – tunc