vc调用vb编写的COM

跟随我 2014-12-11 03:35:52
我用vb.net写了COM组件,里面有个函数要传递字符串,而且要改变字符内容,函数如下:
Public Function TestDll(ByRef strText As String) As Integer
strText = "11111OK"
TestDll = 1
End Function


我在VC里面如何传递呀
我这样传,报错,
BSTR *lt=" ";
int a =comclass.TestDll(lt);

求解大家了,搞了一晚上也没搞出来。。。。。
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
GuttyFish 2014-12-11
  • 打赏
  • 举报
回复
BSTR本身就是指针了, BSTR* 是指向指针的指针,你的初始化有问题,另外试试把ByRef 去掉然后使用二楼的方法。如果不成使用SafeArray 然后指向BSTR。
SiGoYi 2014-12-11
  • 打赏
  • 举报
回复
先说明一下楼主代码存在的问题
BSTR *lt="     ";
int a =comclass.TestDll(lt);

BSTR*的用法不对,直接使用BSTR的话可以使用SysAllocString来创建BSTR这个对象,这是一种方法。 但使用SysAllocString后还需要考虑释放调用SysFreeString,比较麻烦。 所以楼主可以使用2楼的方法使用CComBSTR,这样就不需要考虑释放问题了。 还有一点,我没有使用VB写过com,不知道你com接口参数的类型是否正确,在com中字符串类型都使用BSTR。
vocanicy 2014-12-11
  • 打赏
  • 举报
回复

CComBSTR bstr(64);   // 预分配64字符空间,根据你的需要修改
int a =comclass.TestDll(&bstr);
oyljerry 2014-12-11
  • 打赏
  • 举报
回复
用BSTR*来做参数传递,注意变量生命周期
SiGoYi 2014-12-11
  • 打赏
  • 举报
回复
引用 3 楼 xieming2014 的回复:
再想请教一下,如果是字符数据那么VC怎么传递呀 导出来的格式是这样的 long TestDll(SAFEARRAY * * strText)
SAFEARRAY 是安全数组,.vt是类型,记得把对应的类型存入对应的成员里就好了。取时也是根据.vt类型来取对应的成员。 建议楼主去百度上查一下SAFEARRAY 的用法吧!用法很多,不是一句两句能说清的。在百度上能查到好多资料。
跟随我 2014-12-11
  • 打赏
  • 举报
回复
字符数组,打错字了
跟随我 2014-12-11
  • 打赏
  • 举报
回复
再想请教一下,如果是字符数据那么VC怎么传递呀 导出来的格式是这样的 long TestDll(SAFEARRAY * * strText)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧