您的位置:逆风者 VB 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:45 来源:未知

对于大多数VB的爱好者来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC 的代码.
逆风者
本文就如何把VC 代码转换成VB代码给出了一些策略和方法.

1.定义常量

我们首先看第一个例子:

#define STD_COPY1//COMMCTRL.H

在VC 代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是:

Public ConstSTD_COPY=1

第二个例子:

#define LB_SELECTSTRING0x018C//WINUSER.h

这有一个问题,VC 中所有以"0x"开头的值是十六进制,而在VB中表示十六进制要用"&H"开头.因此转换成VB的代码为:

Const LB_SELECTSTRING=0x018C

第三个例子:

#define TCN_FIRST(0U-550U)

这里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在VB中不支持该数据类型).但是unsignedlong和signedlong(在VB中是Long)两种数据类型的值在存储方式上是一样的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了.

Const TCN_FIRST=(0-550)这同样适合以"L"结尾的值

另外,对于#define CDDS_ITEMPOSTERASE(CDDS_ITEM |CDDS_POSTERASE),我们需要用"Or"来取代"|"

2.结构的定义

我们先看VC 定义的一个比较简单的结构:

type defstruct tagTBSAVEPARAMSA{
HKEYhkr;
LPCSTRpszSubKey;
LPCSTRpszValueName;
}TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;

首先我们需要把第一行的"type defstruct"转换成"Public Type"

Public Type tagTBSAVEPARAMSA

然后处理结构成员,

HKEYhkr;
LPCSTRpszSubKey;
LPCSTRpszValueName;

对于第一个成员类型HKEY.我们要知道VC 中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:

hkrAsLong

同样的,VC 数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:

pszSubKeyAsString
pszValueNameAsString

对于最后一行"}TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;"我们只需要用" EndType "取代

就可以了.转换成VB代码后完整的结构为:

Public Type tagTBSAVEPARAMSA
hkrAsLong
pszSubKeyAsString
pszValueNameAsString
End Type

以下是VC 中数据类型对应到VB中的数据类型VC 数据类型VB数据类型

shortInteger
intLong
longLong
UNITLong
ULONGLong
WORD,DWORDLong
WPARAM,LPARAMLong
WMSG,UMSGLong
HRESULTLong
BOOLBoolean
COLORREFLong
HWND,HDC,HBRUSH,HKEY,等等.Long
LPSTR,LPCSTRString
LPWSTR,OLECHAR,BSTRString
LPTSTRString
VARIANT_BOOLBoolean
unsignedcharByte
BYTEByte
VARIANTVariant
(任何以*或**结尾的数据类型)Long

3.函数的转换

我们知道VB提供了APIVieweradd-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC 函数转换成VB函数格式是非常重要的.先看第一个例子:

WINCOMMCTRLAPIHWNDWINAPI
CreateStatusWindowsA(LONGstyle,
LPCSTRlpszTest,HWNDhwndParent,UINTwID);

这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL)然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到类型对应表,很容易的转换相应的函数参数.

Public Declare Function CreateStatusWindowA Lib "ComCtl32.dll" (Byvalstyle As Long, ByvallpszText As String, ByvalhwndParent As Long,ByvalwID As Long) As Long

相关文章

利用IE控件访问Internet
使用Visual Basic访问数据库几个注意的问题
在 VB5.0中编辑数据库和电子表格
.NET和VB编程创建SQL Server
在VB中获取和修改计算机名字
如何对字符串进行加密解密
浅谈用VB6.0编写木马程序
怎样在VB中声明和使用API函数
截取屏幕图像
应用VB4.0实现工业控制的实时曲线和历史曲线
将包含有Null结尾的字符串转换为VB字符串
VB6 ADO ListView数据库分页显示
在TextBox中查找和继续查找
巧截字符串(探讨用InStrRev函数配合Right/L
Data控件使用有密码的Access数据库
用VB查询数据库记录四法
如何由两个ASC码(区位码)复原成一个汉字?
Unicode与Ansi
在VB6中用 Select 语句检索记录
教你在VB中操作DataGrid视图

相关评论


本文章所属分类:首页 VB

  热门关键字: