VB与VC通信初探(一)

原创 2004年04月22日 14:49:00

 

    在使用VB调用VC写的DLL的时候,可以实现一些VB不能实现或者很难实现的功能,但是,因为VBVC之间的数据类型并不总是完全对应的,所以,在进行参数传递的时候,就需要进行类型转换了。下面我将通过逐步的推进的方法,来看看如何达到VBVC之间的通信。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

    首先,看一个简单的例子。

VC中的程序:

extern "C" _declspec(dllexport) void  ReadString(void)

{

//函数功能

}

 

   将这个VC程序编译成DLL程序供VB调用(假设生成的为commication.dll

 

     VB中的程序:

……………………

Private Declare Function ReadString Lib "commication.dll" ()

……………………

call ReadString

 

     在这里,我们实现了一个简单的通信,即在VC中写了一个DLL,然后再在VB中调用了这个DLL,但是,在这次的通信中,实际上他们之间没有传递任何数据,仅仅是VB调用了DLL,从而使得commication.dll中的函数ReadString()函数执行。这种通信实现是非常简单,所以他完成的功能也就非常的简单,然而我们的要求肯定不止于此。

 

 

    现在就让我们来实现一个使用DLL来处理VB中的数据的例子,并且将处理结果返回给VB程序:

VC中的程序:

extern "C" _declspec(dllexport) bool  ReadString(bool receive)

{

 

if(receive==true)

 return true;

else

 return false;

}

 

VB中的程序:

……………………

Private Declare Function ReadString Lib "commication.dll" (ByVal send As Boolean) as Boolean

……………………

Dim result As Boolean

Dim send As Boolean

 

send = False

 

result = ReadString(send)

 

If result Then

 MsgBox "The return value is 'true'"

Else

 MsgBox "The return value is 'false'"

End If

 

    在这次的通信过程中,我们还是实现了一个很简单的通行过程,在DLL中,根据VB调用的时候传递进来的参数将接收到的参数返回给了VB调用程序,虽然简单,但是已经实现了VBDLL之间的数据传递了,在这里要注意的是它们之间的数据类型,布尔类型的数据在VC中使用的关键字是Boolean,而在VC中使用的关键字则是bool

 

    由于VBVC之间的数据类型没有相同的关键字,为了方便,下面列出常用数据类型在VCVB中分别使用的关键字以及它们之间的对应关系:

 

c中的数据类型  VB中的声明                               结果

 

ATOM         ByVal variable As Integer               结果为Integer 类型的表达式

BOOL         ByVal variable As Boolean             结果为 Long 类型的表达式

BYTE          ByVal variable As Byte                    结果为 Byte 类型的表达式

CHAR         ByVal variable As Byte                   结果为 Byte 类型的表达式

COLORREF ByVal variable As Long                 结果为 Long 类型的表达式

DWORD   ByVal variable As Long                    结果为 Long 类型的表达式

HWND, HDC, HMENU ByVal variable As Long 结果为 Long 类型的表达式等Windows 句柄

INT, UINT    ByVal variable As Long                 结果为 Long 类型的表达式

LONG          ByVal variable As Long                 结果为 Long 类型的表达式

LPARAM    ByVal variable As Long                结果为 Long 类型的表达式

LPDWORD variable As Long                         结果为 Long 类型的表达式

LPINT, LPUINT variable As Long                   结果为 Long 类型的表达式 

LPRECT    variable As type                           自定义类型的任意变量 

 LPSTR, LPCSTR ByVal variable As String 结果为 String 类型的表达式

LPVOID variable As Any 任何变量(在传递字符串的时候使用ByVal

LPWORD variable As Integer                    结果为Integer 类型的表达式 

LRESULT ByVal variable As Long           结果为 Long 类型的表达式

NULL As Any ByVal Nothing ByVal variable As Long ByVal 0& VBNullString

SHORT ByVal variable As Integer              结果为Integer 类型的表达式 

VOID Sub procedure 不可用

WORD ByVal variable As Integer               结果为Integer 类型的表达式

WPARAM ByVal variable As Long             结果为 Long 类型的表达式

 

好了,现在我们已经建立了基本的通信模式了,并且实现了两个简单的通信过程,该休息一下了,之后再来看看更复杂的通信该如何去实现了!(待续)

Vb 与 Vc 的区别

一:简单的对比 VB是由Basic语言演化而来的VisualBasic,意思是可视化Basic,而VC是由C++语言演化而来的VisualC++,意思是可视化C++,VB功能没有VC强大,但是很容易...
  • guomutian911
  • guomutian911
  • 2014年10月21日 11:57
  • 2573

VB中调用VC++开发的DLL

转自:http://lanshanlhy.blog.163.com/blog/static/302294762010112832031218/ 再谈在VB中调用VC++开发的DLL  再谈...
  • xl19900502
  • xl19900502
  • 2016年02月22日 11:17
  • 498

VC++ 与VB 数据类型对应关系

VC++ 与VB 数据类型对应关系   在做VC与vb程序间互相调用,需要注意两种语言不同编译器对数据类型的定义区别,此时两者数据类型的对应关系就显得十分的重要,对应关系以及声明方式如下所示...
  • sdgaojian
  • sdgaojian
  • 2013年12月23日 03:47
  • 694

数据结构练习题---合并表 (顺序表)

描述 已知va和vb分别为非递减有序线性表,将va和vb进行合并为新的线性表vc,并保持vc仍然非递减有序。 本题中,线性表元素为整数。线性表的最大长度为1000。 输入 输入数据有多组...
  • a997930294
  • a997930294
  • 2013年07月26日 10:00
  • 1213

VC宏定义 及常用宏定义说明

END_CATCH    END_CATCH    说明:    标识最后的CATCH或AND_CATCH块的末尾。    END_MESSAGE_MAP    END_...
  • wzszwj
  • wzszwj
  • 2014年09月23日 10:44
  • 1770

使用VB或VC操作Excel 2003

1.VB操作EXCEL2003 [vb] view plaincopy ‘*************************************...
  • czc1009
  • czc1009
  • 2013年10月25日 16:14
  • 1091

VC和VB数据类型对比

VC和VB数据类型对比 API形式 VC VB 长度 char Byte 1 byte unsign...
  • u013166875
  • u013166875
  • 2013年12月16日 21:31
  • 384

VC、VB、Delphi …,你该学哪个?

具体到编程而言,我要告诉你:任何一种计算机语言,都是计算机科学理论的载体或表现形式。C++很神吗?Java很酷吗?它们差距很远吗?是的。但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体...
  • muximuxi_kgsecond
  • muximuxi_kgsecond
  • 2013年03月18日 10:55
  • 407

VC内存对齐准则

本文所有内容在建立在一个前提下:使用VC编译器。着重点在于:VC的内存对齐准则;同样的数据, 不同的排列有不同的大小,另外在有虚函数或虚拟继承情况下又有如何影响? 内存对齐?!What?Why?...
  • zh13544539220
  • zh13544539220
  • 2015年02月28日 17:02
  • 827

VC VB OCX传递参数郁闷记

这两天,用VC做了一个OCX,其中有一个接口是需要传递出来一个内存文件的,很大,大概有2M左右,因为VB简单,就用VB来调试这个OCX,在传递参数的时候遇到了麻烦。 1.OCX的接口里头参数类型...
  • alphaxz1
  • alphaxz1
  • 2015年10月22日 11:14
  • 778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB与VC通信初探(一)
举报原因:
原因补充:

(最多只允许输入30个字)