我有以下COM類型:Project
,ContainerItem
和Node
。 Project
有一個Append
函數的集合屬性,該函數接受ContainerItem
s。在C++中鑄造COM類型
在C#中,使用類型庫,我可以送Node
對象到Append
功能和庫按預期工作:
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++?我錯過了什麼?
C風格轉換在COM接口上無效,您必須使用QueryInterface()。 C#自動執行它,但你必須在C++中自己完成。 –
'Append'將'ContainerItem **'作爲參數看起來不太可能。這是沒有道理的。 「Append」的聲明是什麼? 'Node'和'ContainerItem'之間有什麼關係? –
@IgorTandetnik定義是Container :: Append(ContainerItem **,long *),第二個參數可以爲null。我不知道Node和ContainerItem之間的關係,因爲它沒有在編譯器通過COM DLL創建的.tli文件中表示。 – tunc