20CN网络安全小组第一代论坛
发表新主题  发表回复

个人资料 | 社区目录 用户登录 | | 论坛搜索 | 常见问题 | 论坛主页
  下一个最老的主题   下一个最新的主题
» 20CN网络安全小组第一代论坛   » 电 脑 技 术   » 编程破解   » 把VC++代码转换成VB代码!

   
作者 标题: 把VC++代码转换成VB代码!
千年纪风
未注册


图标 1  发表于         编辑/删除帖子   引用原文回复  
¤喜欢编程的朋友请随我一起走,看看怎样把VC++代码转换成VB代码,OK_Good--往下看!↓

☆ 对于国内大多数VB程序员来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC++的代码.

☆ 本文就如何把VC++代码转换成VB代码给出了一些策略和方法.

---- 1.定义常量

---- 我们首先看第一个例子:

#define STD_COPY 1//COMMCTRL.H

---- 在VC++代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是:

Public Const STD_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中不支持 该数据类型).但是unsigned long和signed long(在VB中是Long)两种数据类型的值在存储方式上是一样 的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了.

Const TCN_FIRST=(0-550) 这同样适合以"L"结尾的值

---- 另外,对于 #define CDDS_ITEMPOSTERASE(CDDS_ITEM | CDDS_POSTERASE),我们需要用"Or"来取代"|"

---- 2.结构的定义

---- 我们先看VC++定义的一个比较简单的结构:

typedef struct tagTBSAVEPARAMSA{
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;

---- 首先我们需要把第一行的"typedef struct"转换成"Public Type"

Public Type tagTBSAVEPARAMSA

---- 然后处理结构成员,

HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;

---- 对于第一个成员类型HKEY.我们要知道VC++中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:

hkr As Long

---- 同样的,VC++数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:


pszSubKey As String
pszValueName As String

对于最后一行"}TBSAVEPARAMSA,FAR*
LPTBSAVEPARAMSA;"我们只需要用
"End Type"取代

---- 就可以了.转换成VB代码后完整的结构为:


Public Type tagTBSAVEPARAMSA
hkr As Long
pszSubKey As String
pszValueName As String
End Type

---- 以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型

------------------------------------
short Integer
intLong
long Long
UNIT Long
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSGLong
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPSTR,LPCSTRString
LPWSTR,OLECHAR,BSTR String
LPTSTRString
VARIANT_BOOLBoolean
unsigned char Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型)Long

---- 3.函数的转换

---- 我们知道VB提供了API Viewer add-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC++函数转换成VB的函数格式是非常重要的.先看第一个例子:

WINCOMMCTRLAPI HWND WINAPI
CreateStatusWindowsA(LONG style,
LPCSTR lpszTest,HWND hwndParent,UINT wID);

---- 这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态 链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL) 然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到 类型对应表,很容易的转换相应的函数参数.

Public Declare Function CreateStatusWindowA Lib
"ComCtl32.dll" _
(Byval style As Long, _
Byval lpszText As String, _
Byval hwndParent As Long,Byval wID As Long) As Long

....
.......
.........THE_END

------------------
天涯孤旅何时才能停止!
带着最终的信念飘零尘世!
只对着一屡屡的清风痴迷!
这就是我-千年纪风-与风作伴的天涯浪子...

IP: 已记录

 
发表新主题  发表回复 关闭主题 突出主题 移动主题 删除主题 下一个最老的主题   下一个最新的主题
 - 适于打印的主题视图
转到:
联系我们 | 20CN网络安全小组

Powered by Infopop Corporation
UBB.classic™ 6.5.0
NetDemon修改版 1.5.0, 20CN网络安全小组 版权所有。