一个关于dll的简单问题,再加50分,求Read函数的调用(50)

  • 主题发起人 主题发起人 laowt
  • 开始时间 开始时间
L

laowt

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3992430http://www.delphibbs.com/delphibbs/dispq.asp?lid=3992483问题接近解决,但abcd_Write虽有问题还可用,abcd_Read函数一用就报错。这个问题一解决,一起结账声明function EasyUSB_Read:Longint; cdecl; external ABCDdll;调用procedure TForm1.btnReadClick(Sender: TObject);Var aa:integer;begin aa:=integer(EasyUSB_Read); edValue.Text := IntToStr(aa); end;由于dll有三个端口,参数好像分别为data1, data2, data3,由于不知道data1参数值,我这里像vb程序只管第一个。但还是出错!由于不知道data1参数值,
 
把声明后面加index 1为function EasyUSB_Read(data1: Pbyte): Longint; cdecl; external ABCDdll index 1;程序运行可以读,未出错,但不管写入什么,读出来总是显示1!问题会在哪里?
 
1、没看到你的硬件,有些只能是猜测2、如果你的硬件是一个USB-IO的转换装置,那么你读入的东西和写入的并没有相关性3、你可以尝试把IO的某些引脚连接到5V或GND上,然后看看读入的数据是否变化
 
硬件是一个USB-IO的转换装置;IO的某些引脚已经连接到5V或GND上,就是接通和断开但人家vc和vb编的程序,都可写、可读
 
这样试试声明procedure EasyUSB_Init; stdcall; external ABCDdll;procedure EasyUSB_Read(var a, b, c: Byte); stdcall; external ABCDdll;procedure EasyUSB_Write(a, b, c: Byte); stdcall; external ABCDdll;调用procedure TForm1.btnReadClick(Sender: TObject);Var a, b, c: Byte;begin a := 0; b := 0; c := 0; EasyUSB_Init; EasyUSB_Read(a, b, c); edValue.Text := Format('Port0:%02X Port1:%02X Port2:%02X', [a, b, c]) ;end;
 
EasyUSB_Init放在FormCreate事件中试了,都是只显示“Port0: 0 Port1: 0 Port2: 0”
 
用随机带的范例读取结果如何?
 
接口这样声明:注意大小写!可以在此网址下载例子:http://cid-6e4d4d5bbb17a750.skydrive.live.com/self.aspx/%e6%b5%8b%e8%af%95%e7%a8%8b%e5%ba%8f/testDLL.7zunit DllInterface;interfaceconst EasyDLL='EasyUSB_DLL.dll'; procedure EasyUSB_Init(); cdecl; procedure EasyUSB_Read(Data1,data2,data3:Pbyte);cdecl; procedure EasyUSB_Write(Data1,data2,data3:Word);cdecl;implementation procedure EasyUSB_Init; external EasyDLL Name 'EasyUSB_Init';//注意大小写 procedure EasyUSB_Read; external EasyDLL Name 'EasyUSB_Read';//注意大小写 procedure EasyUSB_Write; external EasyDLL Name 'EasyUSB_Write';//注意大小写end.这样调用即可。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationuses DllInterface;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin try EasyUSB_Init; except ShowMessage('未找到设备!'); end;end;procedure TForm1.Button2Click(Sender: TObject);var D1,D2,D3:array[0..10] of Byte;begin EasyUSB_Read(@D1[0],@D2[0],@D3[0]);end;试一试!
 
用随机带的范例读取结果,一切正常!
 
把声明变一下看看procedure EasyUSB_Init; cdecl; external ABCDdll;procedure EasyUSB_Read(var a, b, c: Byte); cdecl; external ABCDdll;procedure EasyUSB_Write(a, b, c: Byte); cdecl; external ABCDdll;
 
to tseug,应该试过了
 
多人接受答案了。
 
后退
顶部