急用啊,以下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
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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里没指针,怎么转?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧