gpt4 book ai didi

c++ - 处理 IDispatch 参数和 COM

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:38 25 4
gpt4 key购买 nike

我有一个函数,它通过参数(项目)返回一个指向接口(interface)指针的指针:

CreateProject(std::string str, IDispatch** project);

鉴于另外两个实现 IDispatch 的接口(interface):A 和 B,如果项目的真实类型是 A,以下代码是否合法。(我正在尝试使用 COM VCProjectEngine.CreateProject)

A** a;
B** b;

CreateProject("test.vcxproj", a); //should work but I don't know why
CreateProject("test.vcxproj", b); //should not work but I don't know why

有人可以向我解释一下这种东西是如何工作的吗?抱歉,我对 COM 对象有点陌生。

最佳答案

IDispatch** project 参数通常假定您将指针传递给 IDispatch* 变量,该变量将填充实际的接口(interface)指针:

IDispatch* pDispatch;
pDispatch = NULL; // Sanity, optional
CreateProject("test.vcxproj", &pDispatch);
assert(pDispatch != NULL); // Filled by call above
// ...
pDispatch->Release();

由于处理 COM 接口(interface)指针让您关心正确的引用计数,您通常希望使用包装类,而不是原始指针:

CComPtr<IDispatch> pDispatch;
CreateProject("test.vcxproj", &pDispatch);
ATLASSERT(pDispatch != NULL);

继续阅读 CComPtr在 MSDN 上。

关于c++ - 处理 IDispatch 参数和 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com