阅读:1774回复:9
各位大侠,麻烦帮我看看这段程序为什么不能从USB口读数据?
我用BCB编了一段利用PL-2301双机桥接线通讯的程序,不知为什么使用其提供的API读写函数,老是显示0X00A00000错,而且我在一台计算机上发送几个字符,另一台计算机就出现非法错误,甚至死机。请各位高手帮我看看,是什么毛病?谢谢!
#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include \"transfer.h\" #include \"command.h\" //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TEdit *Edit1; TMemo *Memo1; TButton *Button1; TButton *Button2; TButton *Button3; TLabel *Label2; TEdit *Edit2; void __fastcall FormCreate(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); HCONNECT hConnect; NOTIFYPROC fnNp; NOTIFYPROC1 fnCallback; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif #include <vcl.h> #pragma hdrstop #include \"Unit1.h\" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource \"*.dfm\" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { BOOL USB_Status=false; String USB_P; USB_Status=USB_InitService(fnNp); if(!USB_Status) ShowMessage(\"Failed\"); USB_Status=USBCMD_InitService( \"USBLINK-1\" ,fnCallback); if(!USB_Status) ShowMessage(\"CMD Init Failed\"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { BOOL USB_Status; DWORD datalen=0; DWORD TmO,err1; int err=0; err1=0; char *Readbuf; String USB_P; USB_Status=false; if (hConnect==NULL) { USB_P=\"USBLINK-\"+Edit2->Text; hConnect=USB_OpenConnect(USB_P.c_str()); } if (hConnect==INVALID_HANDLE_VALUE) { ShowMessage(\"Open USBConnect Failed\"); return; } TmO=5000; USB_Status=USB_ReadConnect(hConnect, &datalen, Readbuf, TmO); if(!USB_Status) { DWORD err=USBCMD_GetLastError(); int err1; err1=err>>8; ShowMessage(\"received nothing \"+IntToHex(err1,8)); return; } else { Memo1->Lines->Add(Readbuf); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { if (hConnect!=NULL) USB_CloseConnect(hConnect); USB_ReleaseService(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { BOOL USB_Status; DWORD datalen; char *Writebuf; String USB_P; if (hConnect==NULL) { USB_P=\"USBLINK-\"+Edit2->Text; Memo1->Lines->Add(USB_P); hConnect=USB_OpenConnect(USB_P.c_str()); } if (hConnect==INVALID_HANDLE_VALUE) { ShowMessage(\"Open USBConnect Failed\"); return; } Writebuf=Edit1->Text.c_str(); datalen=Edit1->Text.Length(); USB_Status=false; USB_Status=USB_WriteConnect(hConnect, datalen, Writebuf); if(!USB_Status) { DWORD err=USBCMD_GetLastError(); int err1; err1=err>>8; String tt=\"Sending nothing \"+IntToHex(err1,8); ShowMessage(tt); return; } else Memo1->Lines->Add(Edit1->Text); } |
|
沙发#
发布于:2002-08-12 19:26
我认为,不是你的错!应该是API函数的错,应位你程序中没显使访问硬件,最可能是API与WINDOWS冲突,因为你这是JAVA一类程序,可能是冲突!
|
|
板凳#
发布于:2002-08-12 21:19
WESTBB,谢谢你的关注,不过我的程序访问了USB接口,如:USB_OpenConnect(),USB_ReadConnect(),USB_WriteConnect()等,USBLINK-1就是USB设备名啊。
各位高手有人开发过PL-2301的USB CABLE LINK的通讯程序吗?请帮帮忙指点一二。谢谢! |
|
地板#
发布于:2002-08-13 16:50
帮帮忙啊
|
|
地下室#
发布于:2002-08-15 09:42
怎么一点反应都没有啊?帮忙看看好吗?UP有分
|
|
5楼#
发布于:2002-08-16 15:41
问题出在这里:
Writebuf=Edit1->Text.c_str(); 在你定义时,不能直接用指针指向控件内存地址,需先拷贝内容到定义的数组中,在调用函数。如: char Temp[200]; strcpy(Temp,Edit1->Text.c_str()); USB_Status=USB_WriteConnect(hConnect, datalen, Temp); |
|
|
6楼#
发布于:2002-08-17 20:28
谢谢ZZQ191,我按你说的改了还是不行,现在关键的问题是USB_Status=USB_ReadConnect(hConnect,
&datalen, Readbuf, TmO); 这个函数通不过,老是显示00A00000错,说USB NOT READY。我用厂家提供的程序传文件却是正常的 |
|
7楼#
发布于:2002-08-21 12:02
hi tony_5000
how to contact with you ?PL-2301的API是如何提供的? 我也正在做相关的工作。希望我们多交流!! eamil peasantry@163.com |
|
8楼#
发布于:2002-08-21 17:25
内存溢出!
|
|
9楼#
发布于:2002-08-24 20:10
谁能说说具体怎么解决?谢谢!
|
|