ATL做COM参数返回值问题
ATL做的函数COM想给ASP用,其他都成功,但是就有一个问题是想用参数返回值,比如asp中add(1,2,a)将1+2的和给a,在vc中我给第1,2个参数long值,前...
ATL做的函数COM想给ASP用,其他都成功,但是就有一个问题是想用参数返回值,比如asp中
add(1,2,a)
将1+2的和给a,
在vc中我给第1,2个参数long值,前面有关键字[in],而给a的是long*,关键字[out],为什么总是出错:类型不正确呢?
谢谢了! 展开
add(1,2,a)
将1+2的和给a,
在vc中我给第1,2个参数long值,前面有关键字[in],而给a的是long*,关键字[out],为什么总是出错:类型不正确呢?
谢谢了! 展开
2个回答
展开全部
lt = NULL;
hr = pGuidanceAddress->LogAddressData(xxx, &AddressResult);
// do something
SysFreeString(AddressResult);
服务端分配代码:
*AddressResult = SysAllocString(L"test");
return S_OK;
如果是进程外组件,分配和释放的操作各自执行了两次,步骤如下:
1、存根接口调用组件接口方法,服务器组件分配BSTR
2、存根接口把BSTR列集传递给客户端的代理接口后释放该BSTR
3、代理接口在散列参数后再次调用SysAllocString分配BSTR,并从客户端的LogAddressData调用中返回
4、客户端使用完毕后调用SysFreeString释放BSTR
hr = pGuidanceAddress->LogAddressData(xxx, &AddressResult);
// do something
SysFreeString(AddressResult);
服务端分配代码:
*AddressResult = SysAllocString(L"test");
return S_OK;
如果是进程外组件,分配和释放的操作各自执行了两次,步骤如下:
1、存根接口调用组件接口方法,服务器组件分配BSTR
2、存根接口把BSTR列集传递给客户端的代理接口后释放该BSTR
3、代理接口在散列参数后再次调用SysAllocString分配BSTR,并从客户端的LogAddressData调用中返回
4、客户端使用完毕后调用SysFreeString释放BSTR
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 [out] VARIANT *a
(给 ASP 调用实际上是给 Jscript 或者 VBScript 等脚本调用, 因此 VARIANT 类型是首选).
(给 ASP 调用实际上是给 Jscript 或者 VBScript 等脚本调用, 因此 VARIANT 类型是首选).
更多追问追答
追问
谢谢,VARIANT怎么转换为字符串或者数值呢?
追答
奇怪 在使用 ATL 写 COM 时不知道 VARIANT?
这是另一个问题了. 要从 VARIANT 的定义说起了.
一些有用的, 操作VARIANT 的 API 函数是 Var 开关的函数.
另外 在 _comutil (好像是) 有封装了 VARIANT 的 _variant 类别.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询