gpt4 book ai didi

c++ - 在 ATL 项目中将 NULL 指针传递给进程外 COM 方法的正确方法

转载 作者:可可西里 更新时间:2023-11-01 09:45:28 24 4
gpt4 key购买 nike

在 ATL 项目中将 NULL 指针传递给进程外 COM 方法的正确方法是什么?我创建了一个通过 COM 代理托管的 COM 服务器

如果这很重要,我使用的是在 Win 7 上运行的 VS2012。服务器项目编译为 64 位,客户端项目编译为 32 位

IDL 看起来类似于下面

import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(37EFA952-7036-4398-93A6-6CDAD9DFC005),
dual,
nonextensible,
pointer_default(unique)
]
interface IGame : IDispatch
{
[id(1)] HRESULT passNull([in, out, unique] BSTR* avast, [out, retval] LONG* r);
};

声明是

STDMETHOD(passNull)(BSTR* avast, LONG* r);

和定义

STDMETHODIMP CGame::passNull(BSTR* avast, LONG* r)
{
*r= 0;
return S_OK;
}

我的客户端代码是

void main()
{
CoInitialize( NULL ) ;
IGamePtr p( __uuidof( Game ) ) ;
p->passNull(NULL);
p= NULL ;
CoUninitialize() ;
}

我的理解是,向限定符添加 unique 将允许我通过指针传递 NULL,但奇怪的是,我一直收到消息

_hr 0x800706f4 : A null reference pointer was passed to the stub. 

最佳答案

我不知道你在做什么,CGame::passNull() 函数根本没有给出应该如何处理参数的任何见解。但是 stub 有一个合法的婊子,你真的传递一个 NULL 指针。有效的客户端代码如下所示:

BSTR bs = NULL;
LONG r = p->passNull(&bs);
...
SysFreeString(bs);

关于c++ - 在 ATL 项目中将 NULL 指针传递给进程外 COM 方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013719/

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