atl做的com组件,如果是out类型,那么参数内存可以在组件方分配么? 如果可以分配,是任何类型都可以么? 清举个例子看看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以.out类型需要在组件方分配内存.例子msdn上有. 当然可以。只要你在文档中说明,需要客户去释放就可以了。BSTR* pVal不就是在组件方分配的么? 当然可以out类型的参数就是要组件分配内存,调用方销毁如:HRESULT GetName([out]BSTR* pbstrName);组件实现:{ *pbstrName=SysAllocString(L"liu");}客户调用:BSTR bstrName;GetName(&bstrName);。。SysFreeString(bstrName); 但是我传递了一个long类型的数据,却传递不出来,不知道怎么回事。 代码如下: HRESULT GetName([out]long* pbstrName);组件实现:{ pbstrName = new long; *pbstrName = 10}客户调用:long* lName;GetName(lName);。。delete lName; 问:是否只有BSTR类型可以在组件方分配内存呢?别的类型是否也可以,可以的有那些类型呢? 楼上代码应该写为 HRESULT GetName([out]long* pbstrName);组件实现:{ //pbstrName = new long; *pbstrName = 10}客户调用:long lName;GetName(&lName);//delete lName;BSTR本质上是一个指针long的本质上不是指针 哦,那么说,out类型的参数,除了bstr类型外,基本类型(int ,long ,float....),内存空间都是只能在客户程序中分配了。 可以在组件中分配,如 : HRESULT Method( [out]long* pMemLen , [out,size_is( , *pMemLen )]long **ppValRet );组件中使用 CoTaskMemAlloc 为 ppValRet 分配内存,客户端用 CoTaskMemFree 释放分配的内存。 即使在组件中分配的,占用的还是客户的内存,dll类型组件总是需要调用者的通常应该是谁分配的内存谁负责释放。。 MFC+SqlServer 程序打包求助 p2p 问题 把多个文件名存在一TXT文件中,如何判断文件名已存在,并给出提示? 怎样可以得到一个汉字字符串的第一汉字的拼音的第一个字母 程序一打开对话框就弹出错误! 一个简单问题? 急! 急! 急! 请问怎么取得鼠标指针指的那个位置上的颜色啊? 请大家讨论一下如何组织SDK程序?能发表自己意见者就有分。 如何在CView中显示指定文本文件!(急~~~~~~~!) 各位高手,请帮我看看下面的图像压缩吧…… 夜未眠,请高手指点winsock 如何获得系统socket的分配情况?
BSTR* pVal
不就是在组件方分配的么?
out类型的参数就是要组件分配内存,调用方销毁
如:HRESULT GetName([out]BSTR* pbstrName);
组件实现:
{
*pbstrName=SysAllocString(L"liu");
}
客户调用:
BSTR bstrName;
GetName(&bstrName);
。。
SysFreeString(bstrName);
代码如下:
HRESULT GetName([out]long* pbstrName);
组件实现:
{
pbstrName = new long;
*pbstrName = 10
}
客户调用:
long* lName;
GetName(lName);
。。
delete lName;
问:是否只有BSTR类型可以在组件方分配内存呢?别的类型是否也可以,可以的有那些类型呢?
组件实现:
{
//pbstrName = new long;
*pbstrName = 10
}
客户调用:
long lName;
GetName(&lName);
//delete lName;BSTR本质上是一个指针
long的本质上不是指针
HRESULT Method( [out]long* pMemLen , [out,size_is( , *pMemLen )]long **ppValRet );
组件中使用 CoTaskMemAlloc 为 ppValRet 分配内存,客户端用 CoTaskMemFree 释放分配的内存。