top
Loading...
怎樣把VC++代碼轉換成VB代碼
p>對于大多數VB的愛好者來說,在很多情況下都想通過使用API函數來實現一些比較高級的功能或達到某種特殊效果,這就需要用到一些VC++的代碼.

本文就如何把VC++代碼轉換成VB代碼給出了一些策略和方法.

1.定義常量

我們首先看第一個例子:

#defineSTD_COPY1//COMMCTRL.H

在VC++代碼中用#define定義常量,而在VB中是用Const來定義,因此轉換成VB的代碼是:

PublicConstSTD_COPY=1

第二個例子:

#defineLB_SELECTSTRING0x018C//WINUSER.h

這有一個問題,VC++中所有以"0x"開頭的值是十六進制,而在VB中表示十六進制要用"&H"開頭.因此轉換成VB的代碼為:

ConstLB_SELECTSTRING=0x018C

第三個例子:

#defineTCN_FIRST(0U-550U)

這里有個特別的是定義的值是以"U"結尾,這是意味著該常量的類型是"unsignedlong"(在VB中不支持該數據類型).但是unsignedlong和signedlong(在VB中是Long)兩種數據類型的值在存儲方式上是一樣的,只是表現的形式不同.因此,我們只需要去掉末尾的"U"就可以了.

ConstTCN_FIRST=(0-550)這同樣適合以"L"結尾的值

另外,對于#defineCDDS_ITEMPOSTERASE(CDDS_ITEM|CDDS_POSTERASE),我們需要用"Or"來取代"|"

2.結構的定義

我們先看VC++定義的一個比較簡單的結構:

typedefstructtagTBSAVEPARAMSA{HKEYhkr;LPCSTRpszSubKey;LPCSTRpszValueName;}TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;

首先我們需要把第一行的"typedefstruct"轉換成"PublicType"

PublicTypetagTBSAVEPARAMSA

然后處理結構成員,

HKEYhkr;LPCSTRpszSubKey;LPCSTRpszValueName;

對于第一個成員類型HKEY.我們要知道VC++中的以"H"開頭的大部分數據類型代表的是某種句柄.在VB中每一個Form對象和許多控 加幸桓鰄Wnd屬性,它代表所屬窗口的句柄.hWnd的類型是Long,并且所有用來存儲句柄的變量類型都是Long.因此,該成員在VB中定義為:

hkrAsLong

同樣的,VC++數據類型LPSTR和LPCSTR代表指向字符串的指針,在VB中可以當作String類型.因為當你傳送結構給API時,VB將把結構中所有的String轉換成指向ANSI字符串的指針.因此后兩個成員在VB中表示為:

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

就可以了.轉換成VB代碼后完整的結構為:

PublicTypetagTBSAVEPARAMSAhkrAsLongpszSubKeyAsStringpszValueNameAsStringEndType

以下是VC++中數據類型對應到VB中的數據類型VC++數據類型VB數據類型

shortIntegerintLonglongLongUNITLongULONGLongWORD,DWORDLongWPARAM,LPARAMLongWMSG,UMSGLongHRESULTLongBOOLBooleanCOLORREFLongHWND,HDC,HBRUSH,HKEY,等等.LongLPSTR,LPCSTRStringLPWSTR,OLECHAR,BSTRStringLPTSTRStringVARIANT_BOOLBooleanunsignedcharByteBYTEByteVARIANTVariant(任何以*或**結尾的數據類型)Long

3.函數的轉換

我們知道VB提供了APIVieweradd-in,但是有很多API函數它并沒有包括在內.因此知道如何把VC++函數轉換成VB的函數格式是非常重要的.先看第一個例子:

WINCOMMCTRLAPIHWNDWINAPICreateStatusWindowsA(LONGstyle,LPCSTRlpszTest,HWNDhwndParent,UINTwID);

這個函數創建一個StatusBar控件.從WINCOMMCTRLAPI可以得知該函數來自動態鏈接庫ComCtl32.dll.(有時,我們需要從MSDN中查找某函數對應的DLL)然后我們知道該函數的返回類型是HWND,對應VB的類型是Long.最后,根據前面提到類型對應表,很容易的轉換相應的函數參數.

PublicDeclareFunctionCreateStatusWindowALib"ComCtl32.dll"_(ByvalstyleAsLong,_ByvallpszTextAsString,_ByvalhwndParentAsLong,ByvalwIDAsLong)AsLong
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗