Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1774回复:9

各位大侠,麻烦帮我看看这段程序为什么不能从USB口读数据?

楼主#
更多 发布于:2002-08-12 18:33
我用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);
}
westbb
驱动牛犊
驱动牛犊
  • 注册日期2002-07-15
  • 最后登录2002-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-12 19:26
我认为,不是你的错!应该是API函数的错,应位你程序中没显使访问硬件,最可能是API与WINDOWS冲突,因为你这是JAVA一类程序,可能是冲突!
Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-12 21:19
WESTBB,谢谢你的关注,不过我的程序访问了USB接口,如:USB_OpenConnect(),USB_ReadConnect(),USB_WriteConnect()等,USBLINK-1就是USB设备名啊。

各位高手有人开发过PL-2301的USB CABLE LINK的通讯程序吗?请帮帮忙指点一二。谢谢!
Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-13 16:50
帮帮忙啊
Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-15 09:42
怎么一点反应都没有啊?帮忙看看好吗?UP有分
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
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);

QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-17 20:28
谢谢ZZQ191,我按你说的改了还是不行,现在关键的问题是USB_Status=USB_ReadConnect(hConnect,
&datalen,
Readbuf,
TmO);
这个函数通不过,老是显示00A00000错,说USB NOT READY。我用厂家提供的程序传文件却是正常的
peasantry12345
驱动牛犊
驱动牛犊
  • 注册日期2002-08-21
  • 最后登录2002-08-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-21 12:02
hi tony_5000
  how  to  contact with  you ?PL-2301的API是如何提供的?


我也正在做相关的工作。希望我们多交流!!
          eamil
                  peasantry@163.com
szlai
驱动牛犊
驱动牛犊
  • 注册日期2002-08-20
  • 最后登录2002-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-21 17:25
内存溢出!
Tony_5000
驱动牛犊
驱动牛犊
  • 注册日期2002-08-02
  • 最后登录2002-10-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-24 20:10
谁能说说具体怎么解决?谢谢!
游客

返回顶部