在C++dll和VB之间传递字符串

[复制链接]
查看11 | 回复2 | 2013-12-9 15:16:07 | 显示全部楼层 |阅读模式
我想在VB和C++dll之间传递字符串。以下代码从VB->C++没有问题,但是返回的时候就会产生错误直接导致VB关闭。
请问用什么类型可以完成我想要的传递,或者是用什么方法完成传递?
VB主程序中的调用代码段:
Private Sub Command1_Click() 'debug
Dim a As String
SaveRemark "123", "abc1de"
a = String(200, "0")
QueryRemark "123", a
MsgBox a
End Sub
C++dll中的函数
BOOL __stdcall QueryRemark(LPSTR PicName,char* ReturnValue)
{
strcpy_s(ReturnValue,100,"1234abc");
return 0 ;
}
VB中的dll函数声明
Public Declare Function SaveRemark Lib "SupportDll.dll" (ByVal PicName As String, ByVal Remark As String) As Long
Public Declare Function QueryRemark Lib "SupportDll.dll" (ByVal PicName As String, ByRef ReturnValue As String) As Long
没定义UNICODE的情况下LPSTR就是char*
建立文件中转有点太浪费效率了。。。还有没有别的办法?

回复

使用道具 举报

千问 | 2013-12-9 15:16:07 | 显示全部楼层
VB是基于COM组件的,虽然执行效率低,但是开发效率高,同时带来的问题是技术对开发人员透明了 VB传递给C/C++时自动转为char *类型,但是vb的string其实是BSTR类型,即Basic String你不能传递char *给vb否则vb得到的是Long(Any)是指针的值,这样VB只能能用CopyMemory另外处理了...
回复

使用道具 举报

千问 | 2013-12-9 15:16:07 | 显示全部楼层
C++dll中的函数BOOL __stdcall QueryRemark(LPSTR PicName,char* ReturnValue) 改为BOOL __stdcall QueryRemark(LPSTR PicName,LPSTR ReturnValue)...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行