重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

vc转换vb.net,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

vc++的定义转成vb

#define R_DATALENGTH 15

首先将这个转换为常量(VB也有预编译只能,只是功能...)。

Private Const R_DATALENGTH As Long = 15

DWORD 占四字节,用 Long 替换。

WORD 占两字节,用 Integer 替换。

char 占一字节,用 Byte 替换。

VB没有有无符号,所以替换如下:

Private Type MY_ITEM

r_Item1 As Long

r_Item2 As Integer

r_Item(R_DATALENGTH) As Byte

End Type

联合VB中也没有,只能用类型替代,那个无名结构体起名为 NoName,

VC++中的int是4字节的,所以用Long代替,而不用Integer:

Private Type NoName

item1 As Long

item2 As Single

item3 As Single

item4 As Single

End Type

NoName和MY_ITEM最长的是24字节,定义24字节:

Private Type MY_SSS

Memories(1 To 24) As Byte

End Type

下一个的替换也按照上面的道理,

其中的联合中的DWORD和int都是Long,就合并了:

Private Type MY_TTT

item01 As Long

item02 As Long

item001Oritem002 As Long

item03(R_DATALENGTH) As Byte

End Type

以下的指针都占4个字节,用Long代替。

Private Type MY_DATA

item0001 As Long

item0002 As Long

item0003 As MY_TTT

item0004 As Long

m_item0x As Long

End Type

联合就是共用一块内存,需要内存拷贝的API函数,我们在最上面声明:

Private Declare Sub CopyMemory Lib "kernel32" _

Alias "RtlMoveMemory" ( _

ByVal Dst As Long, _

ByVal Src As Long, _

ByVal Length As Long _

)

MY_SSS、NoName、MY_ITEM需要内存拷贝,我们写出他们的函数:

Private Sub MYSSS_TO_MYITEM(ByRef SSS As MY_SSS, ByRef ITEM As MY_ITEM)

CopyMemory VarPtr(ITEM), VarPtr(SSS), LenB(ITEM)

End Sub

Private Sub MYITEM_TO_MYSSS(ByRef SSS As MY_SSS, ByRef ITEM As MY_ITEM)

CopyMemory VarPtr(SSS), VarPtr(ITEM), LenB(ITEM)

End Sub

Private Sub MYSSS_TO_NONAME(ByRef SSS As MY_SSS, ByRef NoName As NoName)

CopyMemory VarPtr(NoName), VarPtr(SSS), LenB(NoName)

End Sub

Private Sub NONAME_TOMYSSS(ByRef SSS As MY_SSS, ByRef NoName As NoName)

CopyMemory VarPtr(SSS), VarPtr(NoName), LenB(NoName)

End Sub

我们可以在窗体中添加一个按钮,试试联合,看看两个类型(结构体)之间的

内存是否互相影响了,影响就说明联合成功,代码如下:

Private Sub Command1_Click()

Dim s As MY_SSS

Dim i As MY_ITEM

Dim n As NoName

MYSSS_TO_MYITEM s, i

'这里对MY_ITEM的i进行操作。

i.r_Item1 = 3

i.r_Item2 = 7

MYITEM_TO_MYSSS s, i

MYSSS_TO_NONAME s, n

'这里对NoName的n进行操作。

MsgBox n.item1

MsgBox n.item2

NONAME_TO_MYSSS s, n

End Sub

结果很成功。

运用指针就调用CopyMemory函数,第一个参数是目的变量指针,

第二个参数是源指针,第三个参数是复制长度。

VB用运用指针,VarPtr返回除字符串外的变量指针。

字符串变量的指针是直接传递,而StrPtr则返回缓冲区首地址的

内容,对象的指针用ObjPtr获取。

整理以下所有的代码:

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" _

Alias "RtlMoveMemory" ( _

ByVal Dst As Long, _

ByVal Src As Long, _

ByVal Length As Long _

)

Private Const R_DATALENGTH As Long = 15

Private Type MY_ITEM

r_Item1 As Long

r_Item2 As Integer

r_Item(R_DATALENGTH) As Byte

End Type

Private Type NoName

item1 As Long

item2 As Single

item3 As Single

item4 As Single

End Type

Private Type MY_SSS

Memories(1 To 24) As Byte

End Type

Private Type MY_TTT

item01 As Long

item02 As Long

item001Oritem002 As Long

item03(R_DATALENGTH) As Byte

End Type

Private Type MY_DATA

item0001 As Long

item0002 As Long

item0003 As MY_TTT

item0004 As Long

m_item0x As Long

End Type

Private Sub MYSSS_TO_MYITEM(ByRef SSS As MY_SSS, ByRef ITEM As MY_ITEM)

CopyMemory VarPtr(ITEM), VarPtr(SSS), LenB(ITEM)

End Sub

Private Sub MYITEM_TO_MYSSS(ByRef SSS As MY_SSS, ByRef ITEM As MY_ITEM)

CopyMemory VarPtr(SSS), VarPtr(ITEM), LenB(ITEM)

End Sub

Private Sub MYSSS_TO_NONAME(ByRef SSS As MY_SSS, ByRef NoName As NoName)

CopyMemory VarPtr(NoName), VarPtr(SSS), LenB(NoName)

End Sub

Private Sub NONAME_TO_MYSSS(ByRef SSS As MY_SSS, ByRef NoName As NoName)

CopyMemory VarPtr(SSS), VarPtr(NoName), LenB(NoName)

End Sub

Private Sub Command1_Click()

Dim s As MY_SSS

Dim i As MY_ITEM

Dim n As NoName

MYSSS_TO_MYITEM s, i

'这里对MY_ITEM的i进行操作。

i.r_Item1 = 3

i.r_Item2 = 7

MYITEM_TO_MYSSS s, i

MYSSS_TO_NONAME s, n

'这里对NoName的n进行操作。

MsgBox n.item1

MsgBox n.item2

NONAME_TO_MYSSS s, n

End Sub

vb与vb.net的区别,如何入门 vc与vc.net的区别,如何入门 满意加分

VB与VB.net严格上来说还是同一种语言,因为vb.net可以将VB6.0以前版本的源代码进行转换,区别他们的根本在于VB.net用于微软全新的.net框架,如果你编译了一个Vb.net的程序在没有装.net框架的环境下是运行不了的,VB6.0编译生成的是win32位应用程序,他可以适合于目前所有的操作系统,但是他是微软98年的产品,所以到目前已经很老了,和VC++6.0是同一时代的产品,目前VB的最新版本是VB.net2008,语法和VB6.0有出入,但是不大,加入了很多的新元素,如继承。。windows不可能不支持VB,因为VB是微软自己开发的语言!

请教 将vc语言转化为VB

这是函数的引用 而不是函数体本身,你要找到函数体本身,比如

... fnName(...)

{...

}

带有大括号的,如果仅仅是转换函数声明为VB,那简单了,交换一下位置就OK了。

还有,最后那句是函数的调用。

VC结构体转换成VB

那个unsigned没办法,你只能转成字节数组

Structure msg_temp

Dim p1 As Long (这个是有符号的,或者换字节数组: Dim p1(3) As Byte)

Dim p2 As byte

.....

Dim p5 As byte

Dim p6(3) as Byte

.....

End Structure

这样太麻烦了,建议你用类模块解决,可以增加2个转换函数

vc++转C#或VB.NET

完整转

//by 史莱姆

delegate int DllGetClassObjectDelegate(ref Guid ClassId, ref Guid InterfaceId, [Out, MarshalAs(UnmanagedType.Interface)] out object ppunk);

public object Dmnullreg()

{

Guid classfactoryguid = typeof(IClassFactory).GUID;

Guid interfguid = typeof(Idmsoft).GUID;

//这两个Guid 在哪得自己看dm.dll就行.不同版本不同

IntPtr libH = LoadLibrary("dm.dll");

if (libH == IntPtr.Zero)

return false ;

IntPtr factoryFunc = GetProcAddress(libH, "DllGetClassObject");

if (factoryFunc == IntPtr.Zero)

return false;

DllGetClassObjectDelegate factoryDel = (DllGetClassObjectDelegate)Marshal.GetDelegateForFunctionPointer(factoryFunc, typeof(DllGetClassObjectDelegate));

object classfactoryO;

factoryDel(ref classguid, ref classfactoryguid, out classfactoryO);

if (classfactoryO == null)

return false;

IClassFactory classfactory = (IClassFactory)classfactoryO;

object classinstancea = null;

classfactory.CreateInstance(classinstancea, ref interfguid, out obj_object);

Marshal.FinalReleaseComObject(classfactory);

return obj_object;

}


当前文章:vc转换vb.net,vc转换器
文章地址:http://cqcxhl.cn/article/dsijjph.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP