怎么把 vc 代码转换成 vb 代码
对于大多数 VB 的爱好者来说,在很多情况下都想通过使用 API 函数来实现一些比较高级的 功能或达到某种特殊效果,这就需要用到一些 VC 的代码. 本文就如何把 VC 代码转换成 VB 代码给出了一些策略和方法。 1.定义常量 我们首先看第一个例子: #define STD_COPY1 //COMMCTRL.H 在 VC 代码中用#define 定义常量,而在 VB 中是用 Const 来定义,因此转换成 VB 的代码是: Public ConstSTD_COPY = 1 第二个例子: #define LB_SELECTSTRING 0x018C //WINUSER.h 这有一个
问题,VC 中所有以"0x"开头的值是十六进制,而在 VB 中表示十六进制要用"&;H"开 头.因此转换成 VB 的代码为: ConstLB_SELECTSTRING=&;H018C 第三个例子: #define TCN_FIRST(0U-550U) 这 里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在 VB 中不支持该数据类型).但是 unsigned long 和 signed long(在 VB 中是 Long)两种数据类型 的值在存储方式上是一样的,只是表现的形式不同.因此,我们只需要去 掉末尾的"U"就可以 了。 ConstT CN_FIRST = (0-550)这同样适合以"L"结尾的值 另外,对于#define CDDS_ITEMPOSTERASE(CDDS_ITEM|CDDS_POSTERASE),我们需要用 "Or"来取代"|" 2.结构的定义 我们先看 VC 定义的一个比较简单的结构: typedef structtagTBSAVEPARAMSA{
HKEYhkr; LPCSTRpszSubKey; LPCSTRpszValueName; }TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA; 首先我们需要把第一行的"typedef struct"转换成"PublicType" Public TypetagTBSAVEPARAMSA 然后处理结构成员, 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 代码后完整的结构为: PublicTypetagTBSAVEPARAMSA hkrAsLong pszSubKeyAsString pszValueNameAsString EndType 以下是 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 CreateStatus WindowALib"ComCtl32.dll"(ByvalstyleAsLong,ByvallpszTextAsString,ByvalhwndParentAsLon g,ByvalwIDAsLong) AsLong