vb 调用vb dll的问题。

hackwater 2006-08-20 04:51:05
我用vc写了个动态链接库,想在vb里面调用。由于vb经验不足,今天弄了一天还是没有弄出来。
在网上查了很多资料也没有关于 char**,或char*[]如何在vb里使用的情况。
希望高手能够帮忙!万分感激!

vc里的接口如下:
//.h文件
void __stdcall queryDemo(char* query, char* queryResult[],int count);
//.cpp文件
void __stdcall queryDemo(char* query, char* queryResult[],int count){
for (int i=0;i<count;i++){
//char* tmp= new char[80];
//strcpy(tmp,"this is tring");
queryResult[i]="this is a string";
}
}

在vb里我这样调用:
Private Declare Sub queryDemo Lib "vitualsedll.dll" (ByVal queryString As String, buffer() As String, ByVal count As Integer)

Private Sub Form_Load()
Dim str As String
Dim x(0 To 9) As String
queryDemo str, x, 10 //这里出错了,说subscript out of range.

For i = 0 To 9
MsgBox x(i)
Next
End Sub
...全文
158 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackwater 2006-08-21
  • 打赏
  • 举报
回复
先谢谢三位高手,晚上试试。
supergreenbean 2006-08-20
  • 打赏
  • 举报
回复
方便起见,vb这方面你可以传定长字符串数组,然后vc方面应该用strcpy之类的函数复制一份数据到vb的数组中去

不要用queryResult[i]="this is a string";这种方式赋值,因为c函数返回后,你这this is a string就xx了

另外,int对应long,不是integer
pigsanddogs 2006-08-20
  • 打赏
  • 举报
回复
如果你想给vb调用, 就不要去改变指针的值, 而是改变指针的内容.如
strcpy(queryResult[i],"this is a string");
要不vb调用很麻烦的.(你不能直接改变vb的字符串指针, 但可以改变指针的内容)
但还是可以采用 province的方法.

修改成strcpy后.


Private Declare Sub queryDemo Lib "vitualsedll.dll" (ByVal queryString As String, byval buffer as long, ByVal count As Integer)


Dim str As String
Dim x(0 To 9) As String
for i=0 to 9 : x(i) = space(100): next i
queryDemo str, varptr(x(0)), 10

For i = 0 To 9
MsgBox strconv(x(i),vbunicode)
Next



province_ 2006-08-20
  • 打赏
  • 举报
回复
第二个参数是指针数组,所以你应该传一个LONG的数组过去,返回后数组的每个元素均指向一个串,你可以用COPYMEMORY来获得内容。

7,763

社区成员

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

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