在通过DLL实现VB与VC的过程中,一般的简单的通信过程很容易建立。在《VB与VC通信初探(一)》中,我已经把基本的通信过程给描述了一下,但是,有些时候,事件的发展并不总是一帆风顺的,当我们以为可以轻松的实现VB与VC的通信的时候,就经常发生这样的情况,还是先看看例子再说。
VC中的程序:
extern "C" _declspec(dllexport) bool ReadString(LPCSTR lpString)
{
char str[]="Hello World!";
if(strcmp(lpString,str)==0)
return true ;
else
return false ;
}
VB中的程序:
Private Declare Function ReadString Lib "commication.dll" (ByVal send As String) as Boolean
……………………
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)Dim result As Boolean
Dim send As String
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)send =”Hello,World!”
result = ReadString(send)
If result Then
MsgBox "The return value is 'true'"
Else
MsgBox "The return value is 'false'"
End If
可以上机运行这个程序,一样的,实现了通信的功能,但是这里有几个地方是应该引起我们注意的,首先就是在VB中声明传递的字符串参数的时候,按照常规的理解,好像应该是传递地址才对,但是这里使用的方法是ByVal,为什么?原因比较复杂,但是可以简单的来分析一下,在VB中,使用的字符串实际上是BSTR类型的,它是由自动化(以前被称为OLE Automation)定义的数据类型。一个BSTR由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的null值。大部分的BSTR是 Unicode的,即每个字符需要两个字节。BSTR通常以两字节的两个null字符结束。下图表示 了一个BSTR类型的字符串。
(前缀)aTest