在Com组件中如何向外输出字符串?

时间:2021-06-24 22:07:05
我在Com组件中定义如下接口:
HRESULT GetUserName([in] int index, [out,retval] BSTR userName)
但是编译器确报错
error MIDL2121 : [out] only parameter must not derive from a top-level [unique] or [ptr] pointer/array : [ Type 'wireBSTR' ( Parameter 'userName' ) ]

这是什么意思?应该如何更改?
retval表示什么?

谢谢!!!

5 个解决方案

#1


retval idl属性指定一个out参数为返回值。例如对于VB的代码:

HRESULT Sum([in] short x,[in]short y,[out,retval]long *pSum);
在VB中将最后一个参数映射为返回值:
dim sum as long

sum = Sum(10,20)

另外改为就可以了
HRESULT GetUserName([in] int index, [out,retval] BSTR *userName);
out属性不能加在数组前,而必须加在数组的指针前。

#2


同意楼上意见

#3


在组件中有一_bstr_t型的变量m_userName,我本想以下面的方式将结果返回
userName = m_userName,将userName定义成BSTR指针,如何将结果返回?

请原谅,我第一次做组件。
谢谢!!!

#4


使用SysAllocString分配一个BSTR,将m_userName作为参数,返回username
*userName = SysAllocString(m_userName);
外部在使用完userName后释放
SysFreeString(userName);

#5


公司下午不能上网,没有看到你回贴,请原谅

#1


retval idl属性指定一个out参数为返回值。例如对于VB的代码:

HRESULT Sum([in] short x,[in]short y,[out,retval]long *pSum);
在VB中将最后一个参数映射为返回值:
dim sum as long

sum = Sum(10,20)

另外改为就可以了
HRESULT GetUserName([in] int index, [out,retval] BSTR *userName);
out属性不能加在数组前,而必须加在数组的指针前。

#2


同意楼上意见

#3


在组件中有一_bstr_t型的变量m_userName,我本想以下面的方式将结果返回
userName = m_userName,将userName定义成BSTR指针,如何将结果返回?

请原谅,我第一次做组件。
谢谢!!!

#4


使用SysAllocString分配一个BSTR,将m_userName作为参数,返回username
*userName = SysAllocString(m_userName);
外部在使用完userName后释放
SysFreeString(userName);

#5


公司下午不能上网,没有看到你回贴,请原谅