我有以下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