📄 ba35.htm
字号:
<HTML>
<HEAD>
<TITLE>怎样把VC++代码转换成VB代码</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<BODY topMargin=4 vLink=#0000ff>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD height="52">
<DIV align=center>
<CENTER>
<table border=0 cellpadding=0 cellspacing=0 width=679 align="center">
<tbody>
<tr>
<td width=200 height="59">
</TD></TR><!--msnavigation--></TBODY></TABLE>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tbody>
<tr><!--msnavigation--><td valign=top height="123">
<div align=center>
<table border=1 bordercolor=#b9d9ff cellpadding=0 cellspacing=0
class=table width=755>
<center>
<tr>
<td width="100%" height="9">
<div align="center"> <strong><b>怎样把VC++代码转换成VB代码</b> </strong></span></div>
</td>
</tr>
<tr>
<td
width="100%" class="unnamed1" height="124">
<div align="left"><br>
对于大多数VB的爱好者来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC++的代码.
<br>
本文就如何把VC++代码转换成VB代码给出了一些策略和方法. <br>
1.定义常量 <br>
我们首先看第一个例子: <br>
#define STD_COPY 1//COMMCTRL.H <br>
在VC++代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是: <br>
Public Const STD_COPY=1 <br>
第二个例子: <br>
#define LB_SELECTSTRING0x018C //WINUSER.h<br>
这有一个问题,VC++中所有以"0x"开头的值是十六进制,而在VB中表示十六进制要用"&H"开头.因此转换成VB的代码为:
<br>
Const LB_SELECTSTRING = 0x018C<br>
第三个例子: <br>
#define TCN_FIRST(0U-550U) <br>
这里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在VB中不支持
该数据类型).但是unsigned long和signed long(在VB中是Long)两种数据类型的值在存储方式上是一样
的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了. <br>
Const TCN_FIRST=(0-550) 这同样适合以"L"结尾的值 <br>
另外,对于 #define CDDS_ITEMPOSTERASE(CDDS_ITEM | CDDS_POSTERASE),我们需要用"Or"来取代"|"
<br>
2.结构的定义 <br>
我们先看VC++定义的一个比较简单的结构: <br>
typedef struct tagTBSAVEPARAMSA{<br>
HKEY hkr;<br>
LPCSTR pszSubKey;<br>
LPCSTR pszValueName;<br>
}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;<br>
首先我们需要把第一行的"typedef struct"转换成"Public Type"
<br>
Public Type tagTBSAVEPARAMSA<br>
然后处理结构成员, <br>
HKEY hkr;<br>
LPCSTR pszSubKey;<br>
LPCSTR pszValueName;<br>
对于第一个成员类型HKEY.我们要知道VC++中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:
<br>
hkr As Long<br>
同样的,VC++数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:
<br>
pszSubKey As String<br>
pszValueName As String<br>
对于最后一行"}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;"我们只需要用"End
Type"取代 就可以了.转换成VB代码后完整的结构为: <br>
Public Type tagTBSAVEPARAMSA<br>
hkr As Long<br>
pszSubKey As String<br>
pszValueName As String<br>
End Type <br>
以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型 <br>
------------------------------------<br>
short Integer<br>
intLong<br>
long Long<br>
UNIT Long<br>
ULONG Long<br>
WORD,DWORD Long<br>
WPARAM,LPARAM Long<br>
WMSG,UMSGLong<br>
HRESULT Long<br>
BOOL Boolean<br>
COLORREF Long<br>
HWND,HDC,HBRUSH,HKEY,等等. Long<br>
LPSTR,LPCSTRString<br>
LPWSTR,OLECHAR,BSTR String<br>
LPTSTRString<br>
VARIANT_BOOLBoolean<br>
unsigned char Byte<br>
BYTE Byte<br>
VARIANT Variant<br>
(任何以*或**结尾的数据类型)Long <br>
3.函数的转换 <br>
我们知道VB提供了API Viewer add-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC++函数转换成VB的函数格式是非常重要的.先看第一个例子:
<br>
WINCOMMCTRLAPI HWND WINAPI <br>
CreateStatusWindowsA(LONG style,<br>
LPCSTR lpszTest,HWND hwndParent,UINT wID);<br>
这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态 链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL)
然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到 类型对应表,很容易的转换相应的函数参数.
<br>
Public Declare Function CreateStatusWindowA Lib <br>
"ComCtl32.dll" _<br>
(Byval style As Long, _<br>
Byval lpszText As String, _ <br>
Byval hwndParent As Long,Byval wID As Long) As Long<br>
<br>
转载自计算机世界日报 <b>(文/刘锋)</b></font></div>
</td>
</tr>
</center>
<tr>
<td width="100%" class="unnamed1">
<p align=right><a href="ba34.htm">(上一页)</a>---<a href="ba36.htm">(下一页)</a></p>
</td>
</tr>
<tr>
<td width="100%" class="unnamed1">
</div>
</td>
</tr>
<!--msnavigation--></tbody>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -