程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 怎樣把VC++代碼轉換成VB代碼

怎樣把VC++代碼轉換成VB代碼

編輯:VB綜合教程

  對於大多數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"結尾,這是意味著該常量的類型是"unsigned long"(在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"轉換成"Public Type"

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中表示為:

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.最後,根據前面提到類型對應表,很容易的轉換相應的函數參數.

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved