vb调c++ dll如何传参数

qwpacs 2009-09-02 10:28:57
c++原型
void XXXX (unsigned char *i_xml,unsigned char **o_xml)
//i_xml是字符串指针,o_xml是字符串指针地址--在c++中分配空间。
用Private Declare Sub XXXX Lib "YYY.dll" (ByVal strXMLIN As String, ByRef strXMLOUT As String) 不行
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2009-09-02
  • 打赏
  • 举报
回复
1)用 CopyMemory 从 指针的指针 中取得 指针
2)用 lstrlen 取得长度
3)用 VB 的 Space() 函数分配字符串空间
4)用 lstrcpy 复制字符串。

但是,c++中分配的字符串没有释放!
qwpacs 2009-09-02
  • 打赏
  • 举报
回复
现在传回的值是一串数字,头大啊。
qwpacs 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tiger_zhao 的回复:]
strXMLOUT 可以用 Long 表示指针。
但是不建议在c++中分配空间,容易引起内存泄漏之类的问题。
[/Quote]
是啊,可以用long传回指针,但传回的指针如何转回字符串,程序里要用,请指教?
Tiger_Zhao 2009-09-02
  • 打赏
  • 举报
回复
strXMLOUT 可以用 Long 表示指针。
但是不建议在c++中分配空间,容易引起内存泄漏之类的问题。
qingye2008 2009-09-02
  • 打赏
  • 举报
回复
用long
Tiger_Zhao 2009-09-02
  • 打赏
  • 举报
回复
VB 调用 API 会自动对字符串参数进行 Unicode-Ansi 转换,见这个帖子
lyserver 2009-09-02
  • 打赏
  • 举报
回复
string不是unsigned char *,而是BSTR,一是二者编码不同,unsigned char *是ANSI编码,string是UNICODE编码,二是二者内存布局不同,unsigned char *是直接指向字符串,并以"\0"结束,而string指向字符串内存后移4个字节后的地址,前4个字节用来表示string长度,没有使用"\0"表示结束,换句话说,unsigned char *不能包含"\0"符号,而string可以包含一个或多个"\0"。
此外,还需要注意string的内存释放,如果一定要传入string,则不能在dll里释放该内存,否则会导致两次内存释放,而出现未知错误。
当然,最好的办法是要么使用byte()来表示unsigned char *,要么修改dll中的unsigned char *为BSTR,然后在dll内部转换BSTR为unsigned char *。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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