[求助]DELPHI中调用EASYUSB的问题? ( 积分: 100 )

  • 主题发起人 主题发起人 citydawn
  • 开始时间 开始时间
C

citydawn

Unregistered / Unconfirmed
GUEST, unregistred user!
implementation

{$R *.dfm}
function ReadData(pipenum:integer;recbuffer:Pchar;iLen:integer;waittime:integer=-1):integer;stdcall;external'easyusb.dll';
function WriteData(pipenum:integer;sendbuffer:Pchar;iLen:integer;waittime:integer=-1):integer;stdcall;external'easyusb.dll';


procedure TForm1.Button2Click(Sender: TObject);
var
sendstr,recstr:Pchar;
sendcount,reccount,sendlenth:integer;
begin
sendstr:='00';
sendlenth:=length(sendstr);
sendcount:=WriteData(1,sendstr,sendlenth);
if sendcount<>-1 then
begin
edit1.Text:='';
recstr:='';
reccount:=ReadData(1,recstr,64);
if reccount<>-1 then
begin
edit1.Text:=recstr;
end;
end;
end;

以上是我的代码
WriteData发送成功,可是接下来接受ReadData却总是失败?不知道为什么?
 
有没有人帮帮我哦!斑竹在么?
 
等待中.............................
 
recstr:='';
reccount:=ReadData(1,recstr,64);
改成
GetMem(recstr, 64);
reccount:=ReadData(1,recstr,64);
试试,如果还不行就一次不要读64
 
常识问题:recstr是个指针,你不给他分配内存空间怎么收数据?
 
哦,对啊,好苯
我再试下,谢谢!
 
这是函数的说明:
1.1 int __stdcall ReadData(int Endpointnum,unsigned char *recbuffer,int len,int waittime);
/*******************************************************
入口参数:
Endpointnum: 所要操作的端点号,可以为1,2
recbuffer:接收数据缓冲区
len:接收数据缓冲区长度,必须为实际所要接收的数据长度,最大长度为64 个字节
waittime:等待超时时间,为-1 表示一直等待
返回值:读取成功为读取到的字节数,否则为-1
函数功能:从USB 设备读取数据
*******************************************************/

1.2 int __stdcall WriteData(int Endpointnum,unsigned char *sendbuffer,int len,int waittime);
/*******************************************************
入口参数:
Endpointnum: 所要操作的端点号,可以为1,2
secbuffer:发送数据缓冲区
len:发送数据缓冲区长度,必须为实际所要发送的数据长度,最大长度为64个字节
waittime:等待超时时间,为-1 表示一直等待
返回值:写入成功为发送的字节数,否则为-1
函数功能:向USB 设备写入数据

===================================================

还是不行,和开发板的通讯协议是PC发送00,下位机返回59
我发送有有问题么?
 
>>通讯协议是PC发送00,下位机返回59
先搞清楚这个是十六进制?还是ASCII吗?
 
int __stdcall WriteData(int Endpointnum,unsigned char *sendbuffer,int len,int waittime);
这是C语言的函数定义里面定义unsigned char *sendbuffer 我在DELPHI 里定义他为sendbuffer:Pchar
你说的意思是如果是ASCII的话就定义他为PCHAR
如果是16进制就定义为BYTE是么?
 
NO
十六进制的00只是一个字节,而ASCII的00是两个字节(字符)
 
那根据函数的定义unsigned char *sendbuffer 我在DELPHI 里定义他为sendbuffer:Pchar
也就是说我发送的必须是CHAR类型的么?
我测试了以下我发PCHAR类型的'00'时,函数的返回值为2,根据他的函数定义:返回值:写入成功为发送的字节数,否则为-1,说明发送成功了对么?
 
这是我在DELPHI中调用DLL的定义,请看看我定义的对么?是不是我定义的参数类型有问题?
function ReadData(pipenum:integer;recbuffer:Pchar;iLen:integer;waittime:integer=-1):integer;stdcall;external'easyusb.dll';
function WriteData(pipenum:integer;sendbuffer:Pchar;iLen:integer;waittime:integer=-1):integer;stdcall;external'easyusb.dll';

这是函数的说明:
1.1 int __stdcall ReadData(int Endpointnum,unsigned char *recbuffer,int len,int waittime);
/*******************************************************
入口参数:
Endpointnum: 所要操作的端点号,可以为1,2
recbuffer:接收数据缓冲区
len:接收数据缓冲区长度,必须为实际所要接收的数据长度,最大长度为64 个字节
waittime:等待超时时间,为-1 表示一直等待
返回值:读取成功为读取到的字节数,否则为-1
函数功能:从USB 设备读取数据
*******************************************************/

1.2 int __stdcall WriteData(int Endpointnum,unsigned char *sendbuffer,int len,int waittime);
/*******************************************************
入口参数:
Endpointnum: 所要操作的端点号,可以为1,2
secbuffer:发送数据缓冲区
len:发送数据缓冲区长度,必须为实际所要发送的数据长度,最大长度为64个字节
waittime:等待超时时间,为-1 表示一直等待
返回值:写入成功为发送的字节数,否则为-1
函数功能:向USB 设备写入数据

===================================================
 
这种东西收发什么他都不会管的,其实就算是字符他也无法判断,只是当二进制数据处理的,所以什么成什么指针都无所谓的。。。

既然是00,应该是字符吧,数据不会写00的,直接写0就行了。发00过去收到的是什么?
 
发送协议是发送00接受到59
我函数定义发送的是字符,发送'00'执行后下位机的数据灯闪烁并且发送函数WriteData()的返回值为2,应该可以肯定发送成功了吧,可是ReadData()函数就是接受不到数据.
我用USB调试助手测试没有问题,不知道我的程序问题出在那里?我有几点疑问:
1.我是执行了WriteData后紧接着执行ReadData去接受的.这样应该没有问题吧
接受和发送函数里都有waittime这个参数我都设置为了-1
2.如果发送没有问题那问题就应该出在接受上了,大家看我上面的代码里函数定义和执行代码有问题么?
 
请各位前辈帮帮忙,实在是不知道问题出在那里了
 
这个,我也不知道了。。。
 
我用EASYUSB通讯只需要引用这两个函数么?
要读写数据的话还需要其他的函数么?还需要定义读写缓冲区么?
 
请大家关注一下,还是找不到原因
 

Similar threads

I
回复
0
查看
762
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部