国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

怎樣把VC 代碼轉(zhuǎn)換成VB代碼

2019-11-18 17:51:08
字體:
供稿:網(wǎng)友
對于大多數(shù)VB的愛好者來說,在很多情況下都想通過使用API函數(shù)來實(shí)現(xiàn)一些比較高級的功能或達(dá)到某種特殊效果,這就需要用到一些VC 的代碼.
本文就如何把VC 代碼轉(zhuǎn)換成VB代碼給出了一些策略和方法.

1.定義常量

我們首先看第一個例子:

#defineSTD_COPY1//COMMCTRL.H

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

PublicConstSTD_COPY=1

第二個例子:

#defineLB_SELECTSTRING0x018C//WINUSER.h

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

ConstLB_SELECTSTRING=0x018C

第三個例子:

#defineTCN_FIRST(0U-550U)

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

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

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

2.結(jié)構(gòu)的定義

我們先看VC 定義的一個比較簡單的結(jié)構(gòu):

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

首先我們需要把第一行的"typedefstruct"轉(zhuǎn)換成"PublicType"

PublicTypetagTBSAVEPARAMSA

然后處理結(jié)構(gòu)成員,

HKEYhkr;
LPCSTRpszSubKey;
LPCSTRpszValueName;

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

hkrAsLong

同樣的,VC 數(shù)據(jù)類型LPSTR和LPCSTR代表指向字符串的指針,在VB中可以當(dāng)作String類型.因?yàn)楫?dāng)你傳送結(jié)構(gòu)給API時,VB將把結(jié)構(gòu)中所有的String轉(zhuǎn)換成指向ANSI字符串的指針.因此后兩個成員在VB中表示為:

pszSubKeyAsString
pszValueNameAsString

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

就可以了.轉(zhuǎn)換成VB代碼后完整的結(jié)構(gòu)為:

PublicTypetagTBSAVEPARAMSA
hkrAsLong
pszSubKeyAsString
pszValueNameAsString
EndType

以下是VC 中數(shù)據(jù)類型對應(yīng)到VB中的數(shù)據(jù)類型VC 數(shù)據(jù)類型VB數(shù)據(jù)類型

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
(任何以*或**結(jié)尾的數(shù)據(jù)類型)Long

3.函數(shù)的轉(zhuǎn)換

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

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

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

PublicDeclareFunctionCreateStatusWindowALib"ComCtl32.dll"(ByvalstyleAsLong,ByvallpszTextAsString,ByvalhwndParentAsLong,ByvalwIDAsLong)AsLong->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 松潘县| 东兰县| 玛纳斯县| 栾川县| 武城县| 泰安市| 廊坊市| 二手房| 安龙县| 黄龙县| 天门市| 永丰县| 革吉县| 贵州省| 卫辉市| 普安县| 永清县| 临江市| 汕尾市| 高雄市| 吴旗县| 申扎县| 乌鲁木齐市| 胶州市| 惠东县| 会泽县| 天长市| 新野县| 定兴县| 湘阴县| 获嘉县| 洪洞县| 高州市| 绍兴县| 黔南| 博兴县| 陆丰市| 德安县| 滨海县| 新蔡县| 北票市|