?? 如何把vc++代碼轉(zhuǎn)換成vb代碼.txt
字號:
如何把VC++代碼轉(zhuǎn)換成VB代碼?
--------------------------------------------------------------------------------
第八軍團(tuán) 時(shí)間:2003-11-9 1:02:39
對于大多數(shù)VB的愛好者來說,在很多情況下都想通過使用API函數(shù)來實(shí)現(xiàn)一些比較高級的功能或達(dá)到某種特殊效果,這就需要用到一些VC++的代碼.
本文就如何把VC++代碼轉(zhuǎn)換成VB代碼給出了一些策略和方法.
1.定義常量
我們首先看第一個(gè)例子:
#define STD_COPY1//COMMCTRL.H
在VC++代碼中用#define定義常量,而在VB中是用Const來定義,因此轉(zhuǎn)換成VB的代碼是:
Public ConstSTD_COPY=1
第二個(gè)例子:
#define LB_SELECTSTRING0x018C//WINUSER.h
這有一個(gè)問題,VC++中所有以"0x"開頭的值是十六進(jìn)制,而在VB中表示十六進(jìn)制要用"&H"開頭.因此轉(zhuǎn)換成VB的代碼為:
Const LB_SELECTSTRING=0x018C
第三個(gè)例子:
#define TCN_FIRST(0U-550U)
這里有個(gè)特別的是定義的值是以"U"結(jié)尾,這是意味著該常量的類型是"unsigned long"(在VB中不支持該數(shù)據(jù)類型).但是unsignedlong和signedlong(在VB中是Long)兩種數(shù)據(jù)類型的值在存儲方式上是一樣的,只是表現(xiàn)的形式不同.因此,我們只需要去掉末尾的"U"就可以了.
Const TCN_FIRST=(0-550)這同樣適合以"L"結(jié)尾的值
另外,對于#define CDDS_ITEMPOSTERASE(CDDS_ITEM |CDDS_POSTERASE),我們需要用"Or"來取代"|"
2.結(jié)構(gòu)的定義
我們先看VC++定義的一個(gè)比較簡單的結(jié)構(gòu):
type defstruct tagTBSAVEPARAMSA{
HKEYhkr;
LPCSTRpszSubKey;
LPCSTRpszValueName;
}TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;
首先我們需要把第一行的"type defstruct"轉(zhuǎn)換成"Public Type"
Public Type tagTBSAVEPARAMSA
然后處理結(jié)構(gòu)成員:
HKEYhkr;
LPCSTRpszSubKey;
LPCSTRpszValueName;
對于第一個(gè)成員類型HKEY.我們要知道VC++中的以"H"開頭的大部分?jǐn)?shù)據(jù)類型代表的是某種句柄.在VB中每一個(gè)Form對象和許多控件都有一個(gè)hWnd屬性,它代表所屬窗口的句柄.hWnd的類型是Long,并且所有用來存儲句柄的變量類型都是Long.因此,該成員在VB中定義為:
hkrAsLong
同樣的,VC++數(shù)據(jù)類型LPSTR和LPCSTR代表指向字符串的指針,在VB中可以當(dāng)作String類型.因?yàn)楫?dāng)你傳送結(jié)構(gòu)給API時(shí),VB將把結(jié)構(gòu)中所有的String轉(zhuǎn)換成指向ANSI字符串的指針.因此后兩個(gè)成員在VB中表示為:
pszSubKeyAsString
pszValueNameAsString
對于最后一行"}TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;"我們只需要用" EndType "取代
就可以了.轉(zhuǎn)換成VB代碼后完整的結(jié)構(gòu)為:
Public Type tagTBSAVEPARAMSA
hkrAsLong
pszSubKeyAsString
pszValueNameAsString
End Type
以下是VC++中數(shù)據(jù)類型對應(yīng)到VB中的數(shù)據(jù)類型
VC++ VB
short Integer
int Long
long Long
UNIT Long
ULONG Long
WORD DWORDLong
WPARAM LPARAMLong
WMSG UMSGLong
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等 Long
LPSTR LPCSTR String
LPWSTR,OLECHARBSTR String
LPTSTR String
VARIANT_BOOL Boolean
unsignedchar Byte
BYTE Byte
VARIANT Variant
(任何以*或**結(jié)尾的數(shù)據(jù)類型) Long
3.函數(shù)的轉(zhuǎn)換
我們知道VB提供了APIVieweradd-in,但是有很多API函數(shù)它并沒有包括在內(nèi). 因此知道如何把VC++函數(shù)轉(zhuǎn)換成VB的函數(shù)格式是非常重要的.先看第一個(gè)例子:
WINCOMMCTRLAPIHWNDWINAPI
CreateStatusWindowsA(LONGstyle,
LPCSTRlpszTest,HWNDhwndParent,UINTwID);
這個(gè)函數(shù)創(chuàng)建一個(gè)StatusBar控件.從WINCOMMCTRLAPI可以得知該函數(shù)來自動態(tài)鏈接庫ComCtl32.dll.(有時(shí),我們需要從MSDN中查找某函數(shù)對應(yīng)的DLL)然后我們知道該函數(shù)的返回類型是HWND,對應(yīng)VB的類型是Long.最后,根據(jù)前面提到類型對應(yīng)表,很容易的轉(zhuǎn)換相應(yīng)的函數(shù)參數(shù).
Public Declare Function CreateStatusWindowA Lib "ComCtl32.dll" (Byvalstyle As Long, ByvallpszText As String, ByvalhwndParent As Long,ByvalwID As Long) As Long
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -