急用啊,以下c语言接口如何转成VB,我的有错吗

大帮手软件 程序员  2007-11-13 09:05:55
'DWORD MWRF_EmitATTCard(
' BOOL bIsBig5, //系统繁简体
' DWORD nCardID, // 用户卡号(流水号),取值为0 ~ 300000 建议与消费系统取值定义为一样
' char *strPersonID, //用户编号(建议统一全部为0~9数字,但支持前两位为字母) 建议与消费系统取值定义为一样
' DWORD nGrade, // 级别,可与消费系统定义为一样
' DWORD nAttGroup, // 组别,0 ~ 255,对应256个分组号,
' char *strUserKey, //个人密码,如系统不使用,建议取值"0000"
' char *strName, //姓名
' DWORD nYear, //卡使用有效年,如系统不使用,建议取值2020
' DWORD nMonth, //卡使用有效月,如系统不使用,建议取值12
' DWORD nDay, //卡使用有效日,如系统不使用,建议取值30
' DWORD *TagSN // IC卡原始序列号
');


Public Declare Function MWRF_EmitATTCard Lib "gscmd.dll" (ByVal bIsBig5 As Boolean, ByVal nCardID As Long, ByVal strPersonID As String, _
ByVal nGrade As Long, ByVal nAttGroup As Long, ByVal strUserKey As String, ByVal strname As String, ByVal nYear As Long, _
ByVal nMonth As Long, ByVal nDay As Long, ByRef TagSN As Long) As Long
...全文
57 点赞 收藏 7
写回复
7 条回复
大帮手软件 2007年11月17日
除ByVal bIsBig5 As Boolean,应为ByVal bIsBig5 As long 外,其它没错,是字符型要传值时要声明为定长字符串.
回复 点赞
色郎中 2007年11月14日
简单啊

没指针 用数组啊

给你参考 呵呵

'apiReturn _stdcall Net_GetNetwork(SOCKET hSocket, BYTE *IP_Address, int *Port, BYTE *Mask, BYTE *Gateway);


Declare Function Net_GetNetwork Lib "Reader2600DLL.dll" ( _
ByVal m_hScanner As Long, _
ByRef ip_address As Byte, _
ByRef Port As Long, _
ByRef mask As Byte, _
ByRef Geteway As Byte _
) As apiReturn
回复 点赞
jinder 2007年11月14日
去这里看看.
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

转换结果不是很完美,不过可以参考.
回复 点赞
of123 2007年11月14日
'DWORD MWRF_EmitATTCard(
' BOOL bIsBig5, //系统繁简体
' DWORD nCardID, // 用户卡号(流水号),取值为0 ~ 300000 建议与消费系统取值定义为一样
' char *strPersonID, //用户编号(建议统一全部为0~9数字,但支持前两位为字母) 建议与消费系统取值定义为一样
' DWORD nGrade, // 级别,可与消费系统定义为一样
' DWORD nAttGroup, // 组别,0 ~ 255,对应256个分组号,
' char *strUserKey, //个人密码,如系统不使用,建议取值 "0000 "
' char *strName, //姓名
' DWORD nYear, //卡使用有效年,如系统不使用,建议取值2020
' DWORD nMonth, //卡使用有效月,如系统不使用,建议取值12
' DWORD nDay, //卡使用有效日,如系统不使用,建议取值30
' DWORD *TagSN // IC卡原始序列号
');


Public Declare Function MWRF_EmitATTCard Lib "gscmd.dll"(ByVal bIsBig5 As Long, ByVal nCardID As Long, ByVal strPersonID As String, _
ByVal nGrade As Long, ByVal nAttGroup As Long, ByVal strUserKey As String, ByVal nMonth As Long, ByVal nDay As Long, ByRef TagSN As Long)As Long

注意 Boolean, VB 中它占用 1 字节,-1 是 True, 0 是 False。在 C++ 中, BOOL 是 int 型, 1 是 TRUE.
回复 点赞
Tiger_Zhao 2007年11月14日
C中的BOOL是4字节,在VB中应该用Long代替。
回复 点赞
脆皮大雪糕 2007年11月13日
用 varptr 可以获得变量的地址,也就是指针
对于字符串比较特殊一点
你的例子太长了,懒得写咱们举一个简单的
比如C里面的函数定义为 long test(char *strIn){……}
VB里面声明他

Public DeclareFunction test Lib "gscmd.dll " (ByVal strIn as long) as long

调用的时候
dim strIn as string
dim strTmp() as byte
dim point as long
strin ="abcd"
strtmp = strconv(strin & Chr(0),vbfromunicode) '把字符串转换成字节数组,并且加上C语言中字符串的结束符
point = varptr(strtmp(0)) '获取字节数足首元素的地址,这就是指针了
test(point)
回复 点赞
fcuandy 2007年11月13日
vb里没指针,怎么转?
回复 点赞
发动态
发帖子
VB基础类
创建于2007-09-28

2747

社区成员

19.7w+

社区内容

VB 基础类
社区公告
暂无公告