开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1529|回复: 2
收起左侧

[其它] 如何把VC++代码转换成VB代码

[复制链接]

结帖率:100% (11/11)
发表于 2013-8-2 10:50:50 | 显示全部楼层 |阅读模式   河北省衡水市

 对于大多数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


结帖率:57% (13/23)
发表于 2013-8-2 11:07:39 | 显示全部楼层   广东省惠州市
我看到了天文数字
回复 支持 反对

使用道具 举报

结帖率:93% (66/71)

签到天数: 5 天

发表于 2013-8-2 11:00:26 | 显示全部楼层   天津市天津市
看着头晕
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表