VB有关指针字符的问题.
时间:2011-08-30
来源:互联网
DELPHI中的使用
function ReadCardMsg(incom : integer;user_code :pchar;card_key :
pchar;Card_id : pchar;Card_no :pchar;limit_money : pchar) : integer; stdcall;
external 'rf_carddll.dll' name 'ReadCardMsg';
var
cardid,cardno,limit_money : pchar;
i : integer;
GetMem(cardid,16);
GetMem(cardno,16);
GetMem(limit_money,16);
i := ReadCardMsg(strtoint(edit1.Text),pchar(edit2.Text),pchar(edit3.Text),cardid,cardno,limit_money);
....
edit5.Text := string(cardid);
edit6.Text := string(cardno);
....
FreeMem(cardid);
FreeMem(cardno)
VB中使用时,有问题,应该怎么修改?
其中card_id ,card_no,limit_money返回的是指针地址
Private Declare Function ReadCardMsg Lib "rf_carddll.dll" (ByVal incom As Integer, ByVal user_code As String, ByVal card_key As String, ByRef card_id As String, ByRef card_no As String, ByRef limit_money As String) As Integer
Dim code As Integer
Dim card_id As String, card_no As String, limit_money As String
code = ReadCardMsg(CInt(Text1.Text), Text2.Text, Text3.Text, ByVal VarPtr(card_id), ByVal VarPtr(card_no), ByVal VarPtrlimit_money))
...
Text4.Text = card_id
Text5.Text = card_no
作者: zmphy 发布时间: 2011-08-30
作者: Veron_04 发布时间: 2011-08-30
作者: zmphy 发布时间: 2011-08-30
作者: zmphy 发布时间: 2011-08-30
Private Declare Function ReadCardMsg Lib "rf_carddll.dll" (ByVal incom As Integer, ByVal user_code As long, ByVal card_key As long, ByRef card_id As long, ByRef card_no As long, ByRef limit_money As long) As Integer
试试
作者: BestBadGod 发布时间: 2011-08-30
user_code,card_key是字符
你的方法我试了,一样,如果编译成EXE的话,不报错,但没结果,直接退出.
作者: zmphy 发布时间: 2011-08-30
其实CODE我已经通过调试知道了结果,是正确的
问题应该是返回CARD_ID,CARD_NO时的错.
作者: zmphy 发布时间: 2011-08-30
作者: BestBadGod 发布时间: 2011-08-30
作者: zmphy 发布时间: 2011-08-30
Private Declare Function ReadCardMsg Lib "rf_carddll.dll" (ByVal incom As Long, ByVal user_code As String, ByVal card_key As String, ByRef card_id As Byte, ByRef card_no As Byte, ByRef limit_money As Bye) As Long
Dim code As Long
Dim card_id(255) As Byte, card_no(255) As Byte, limit_money(255) As Byte
code = ReadCardMsg(CInt(Text1.Text), Text2.Text, Text3.Text, card_id(0), card_no(0), limit_money(0))
...
Text4.Text = StrConv(card_id, vbUnicode)
Text5.Text = StrConv(card_no, vbUnicode)
作者: of123 发布时间: 2011-08-30
非常感谢,
Text4.Text = StrConv(card_id, vbUnicode)
Text5.Text = StrConv(card_no, vbUnicode)
已经取出值了,而且也DELPHI的程序的值是一样的,非常感谢.
现在还有一个问题,取出值以后,我就没有操作了,但是还是报
"0x00c284d0"指令引用的"0X00000000"内存,该内存不能为"written"
作者: zmphy 发布时间: 2011-08-30
Option Explicit Private Declare Function ReadCardMsg Lib "rf_carddll.dll" (ByVal incom As Long, _ ByRef user_code As String, _ ByRef card_key As String, _ ByRef card_id As Byte, _ ByRef card_no As Byte, _ ByRef limit_money As Byte) As Long Private Sub Command1_Click() Dim code As Long Dim strUserCode As String Dim strCardKey As String Dim card_id(255) As Byte, card_no(255) As Byte, limit_money(255) As Byte strUserCode = Text2.Text strCardKey = Text3.Text code = ReadCardMsg(CInt(Text1.Text), StrPtr(strUserCode), StrPtr(strCardKey), card_id(0), card_no(0), limit_money(0)) Text4.Text = StrConv(card_id, vbUnicode) Text5.Text = StrConv(card_no, vbUnicode) End Sub
作者: Veron_04 发布时间: 2011-08-30
在调试模式下,
code = ReadCardMsg(CInt(Text1.Text), Text2.Text, Text3.Text, card_id(0), card_no(0), limit_money(0))
报错"0x00c284d0"指令引用的"0X00000000"内存,该内存不能为"written"
编译成EXE后,
Text4.Text = StrConv(card_id, vbUnicode)
Text5.Text = StrConv(card_no, vbUnicode)
已经取到了正确的值,然后再报错
报错"0x00c284d0"指令引用的"0X00000000"内存,该内存不能为"written"
作者: zmphy 发布时间: 2011-08-30
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28