各位专家,有个关于写硬件的问题,请教一下!估计是PSafeArray的问题,我没写好!请大家帮忙了!(50分)

  • 主题发起人 主题发起人 html98
  • 开始时间 开始时间
H

html98

Unregistered / Unconfirmed
GUEST, unregistred user!
rgsabound: array[0..0] of SafeArrayBound;
arrCard: PSafeArray;
sCardDown: String;
sField: String;
j: LongInt;
i: Integer;
begin
statu := EquipDoor1.MP2000_Ini_COM(i);
i := 1;
j := 0;
rgsabound[0].lLbound := 0;
rgsabound[0].cElements := 1;
arrCard := SafeArrayCreate(VT_BSTR, 1, rgsabound);
arrCard.cbElements := 1;
arrCard.fFeatures := FADF_BSTR; //$100
sField := '7879';
sCardDown := HexValueToStr(StrToInt(sField),8) + '19' + '12' + '02' +
'1' + '0';
SafeArrayPutElement(arrCard,@j,sCardDown);
//SafeArrayGetElement(arrCard,j,sField);
//SafeArrayAccessData(arrCard,pvdata);

//sField := pvdata.Data;

statu := EquipDoor1.MP2000_Write_UserCard(i,arrCard);
//statu := Equpt.MP2000_Write_UserCard(1,arrCard);
if statu = 1 then
mmInfo.Lines.Add('Write User Machine Ok!');
statu := Equpt.MP2000_Close_COM;
if statu = 1 then
mmInfo.Lines.Add('Close Comm Ok');
end;
问题是:statu总是-1,只有是1才算写硬件成功!其它关于打开端口和关闭端口都是成功的! 我是调用了用VB写成的动态库,在Delphi中引用并安装的!
先谢谢各位专家了!谢谢!
 
我是外行,说句外行的话
这卡是不是只读的呢?
 
当然不是啦!请大家帮忙啦!
 
这只是上层操作
你有没有调试过写卡的驱动程序呢
 
调试过的,用VB写数据,都是1,而用Delphi就是-1,一直都通不过!
VB也是通过引用类,来调用动态库的!只是VB中调用用到的是数组,M() AS STRING
DELPHI中用的是PSafeArray!,关于PSafeArray的使用不会有问题吧?
 
你也用数组试试 ,如果调试通过的话,你就可以换别的方法了
 
我试过了,把相关的接口也改成了用数组,但就是不行!出现一个相关VB的DLL文件写错误!我甚至用VB测试成功的程序编了个动态库,再用Delphi调用,还是老样子!结果总是-1!
 
statu := EquipDoor1.MP2000_Ini_COM(i);
这里的I是设置句柄
i := 1;
你又改了!你后面怎么能用的了设备,我写一个读卡器时也有这个问题,后来才发现。
设备句柄改了,就不是那个设备了,怎么可能返回的不是-1?
 
真的非常感谢boy2002cn、sbzldlb、SiWeiLiuLang的热心帮助!
i是指串口号,并不是句柄!i = 1:是指写卡的机器地址!谢谢boy2002cn
 
但是,问题并不在这里,我测试还是不能通过!
 
帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
后退
顶部