如何把VC++代碼轉換成VB代碼
来源:互联网 发布:军用开山刀淘宝 编辑:程序博客网 时间:2024/05/15 09:27
如何把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
很多情況下都想通過使用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
- 如何把VC++代碼轉換成VB代碼
- 我把vc当vb (学vc++的过程)
- [VB.NET]如何把一个c#程序转变为VB.NET
- 我把vc当vb(前言 几年程序员的感受)
- VB 如何把一个listbox作为参数传递
- 如何实现VB和VC的联合调试
- Java如何通过VC调用VB编写的COM
- VC编写的DLL如何给VB返回字符串
- Java如何通过VC调用VB编写的COM
- 如何在VB中调用VC编写的DLL
- [VB.NET]vb.net如何把jpg图片插入到Excel中?谢了
- [VB.NET]VB.net中如何直接把Combobox下拉项拖放到另一个Combobox
- VC中如何把一串文字旋转90度显示
- VC下如何把obj打包成lib
- vc中如何把窗口坐标系转为笛卡尔坐标系
- VC中如何把窗口隐藏到托盘
- 如何把VC工程.vcproj转化为Qt工程.pro
- How to invoke active dll written by VB using VC - VC如何调用VB写的Active Dll - 详解
- 慢慢开始的编程生活
- 关于MMU和页表的一些概念
- 程序员如何防止脑疲劳:下午补充一些干果
- 深入探讨C++中的引用
- 如何编写木马病毒
- 如何把VC++代碼轉換成VB代碼
- 用 PHP 读取文件的正确方法
- extjs中combo组件的100%宽度设置
- 内码转换技术
- javascript 与jquery 语句失效的原因
- [原创]内存文件读写类CMemoryFile(内存中模拟目录和文件)
- 该内存不能read written常见原因
- 电脑族的饮食葵花宝典
- 理解ASCII码