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

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

編輯:vc教程
 對於大多數VB的愛好者來說,在很多情況下都想通過使用API函數來實現一些比較高級的功能或達到某種特殊效果,這就需要用到一些VC++的代碼.

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

  1.定義常量

  我們首先看第一個例子:

  #define STD_COPY1//COMMCTRL.H

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

  Public ConstSTD_COPY=1

  第二個例子:

  #define LB_SELECTSTRING0x018C//WINUSER.h

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

  Const LB_SELECTSTRING=0x018C

  第三個例子:

  #define TCN_FIRST(0U-550U)

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

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

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

  2.結構的定義

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

  type defstruct tagTBSAVEPARAMSA{
  HKEYhkr;
  LPCSTRpszSubKey;
  LPCSTRpszValueName;
  }TBSAVEPARAMSA,FAR*LPTBSAVEPARAMSA;

  首先我們需要把第一行的"type defstruct"轉換成"Public Type"

  Public Type tagTBSAVEPARAMSA
  然後處理結構成員:

  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代碼後完整的結構為:

  Public Type tagTBSAVEPARAMSA
  hkrAsLong
  pszSubKeyAsString
  pszValueNameAsString
  End Type
  以下是VC++中數據類型對應到VB中的數據類型

  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
  (任何以*或**結尾的數據類型) 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 CreateStatusWindowA Lib "ComCtl32.dll" (Byvalstyle As Long, ByvallpszText As String, ByvalhwndParent As Long,ByvalwID As Long) As Long

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