正在阅读:VB与VC通信初探(二)VB与VC通信初探(二)

2004-05-11 10:21 出处:CSDN 作者:eliner 责任编辑:linjixiong
(前缀)aTest\0   头部BSTR指向数据的第一个字节   另一方面,大部分的DLL过程(包括Windows 95 API中的所有过程)使用LPSTR类型字符串,这是指向标准的以null结束的C语言字符串的指针,它也被称为ASCIIZ字符串。LPSTR 没有前缀。下图显示了一个指向ASCIIZ字符串的LPSTR。   aTest\0   LPSTR指向一个以null结尾的字符串数据的第一个字节   通过上面的简单分析,不难看出,如果均以地址的方式传递参数的话,那么VB中的字符串将会包含更多德内容,所以,在这里,就必须以值的方式传递参数,虽然是以值得方式传递的参数,但是在DLL中还是能够识别得出来这是一个字符串,并且将它转换成为字符串。   好了,上面的这个问题我们已经解决了,但是,我们现在的胃口肯定也变得慢慢得有点大了,既然我们已经实现了能够从VB中把字符串传给DLL,那么,又应该怎么样才能够从DLL中把字符串返回给VB程序呢?通过上面的分析我们知道,因为两者之间使用的字符不是相同的格式的,所以简单的传输肯定是不行的,那么应该如何解决呢?其实,在明白了上面我们分析的道理后,再来解决这个问题就太easy了,只需要把传回的字符串进行一次转换就可以了,是的,下面就给出这个实例,注意的黑体部分就可以了。   VC中的程序:      extern "C" _declspec(dllexport) BSTR ReadString(LPCSTR lpString)      {          char str="Hello ,World!";      if(strcmp(lpString,str)==0)      return SysAllocString((BSTR)str);      else      return SysAllocString((BSTR)lpString);      }      VB中的程序:      Private Declare Function ReadString Lib "commication.dll" (ByVal send As String) as String      ……………………      Dim result As String      Dim send As String      send =”Hello,World!”      result = ReadString(send)      MsgBox result      为了继续学习下去,我一定会继续完成这一系列的文章,同时也希望可以看到愿意一起学习这方面的知识的朋友给我提意见,与我联系,共同进步!       
察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品