0

mpusbapi.hで定義されている次の関数を使用しようとしています

HANDLE(*MPUSBOpen)(DWORD instance,     //Input
                   PCHAR pVID_PID,     //Input identifier
                   PCHAR pEP,          //Input pipe
                   DWORD dwDir,        //Input
                   DWORD dwReserved);  //Input <Future Use>

DWORD(*MPUSBWrite)(HANDLE handle,          //Input
                   PVOID pData,            //Input
                   DWORD dwLen,            //Input
                   PDWORD pLength,         //Output
                   DWORD dwMilliseconds);  //Input

test.cppでこれらを使用すると、次のようになります。

HANDLE LACOutpipe;
pipeName="\\MCHP_EP";
PCHAR VidPid="vid_04d8&pid_fc5f";
BYTE bufData[3];
DWORD buflen=sizeof(bufData);
DWORD bufProcessed;

LACOutpipe=MPUSBOpen(0,        //only one device connected, dont need to check for multiple
                     VidPid,   //this is the device driver vid and pid
                     pipeName, //the pipe to write to?
                     MP_WRITE, //MP_WRITE is just 1
                     0);       //not supported yet?
cout<<LACOutpipe<<endl;

//now use LACOutpipe handle to write

cout<<MPUSBWRITE(LACOutpipe,   //the handle to write to
               bufData,        //BYTE array with data to be sent
               bufLen,         //length of bufData
               &bufProcessed,  //bytes processed
               10000)          //10 second timeout
               <<endl;

cout<<GetLastError()<<endl;

コンソール出力は次のとおりです。

FFFFFFFF
0
6
Press any key to continue...

MPUSBWriteが0を返すということは、書き込み機能が失敗したことを意味します。エラーコード6はERROR_INVALID_HANDLEに対応します:ハンドルが無効です。

誰もが理由を知っていますか?私には予感がありますが、pipeNameこれを確認/修正する方法がわかりません。

4

1 に答える 1

0

OKはこれを理解しました。

誤った宣言:

PCHAR VidPid= "vid_04d8&pid_fc5f";
DWORD pipeName="\\MCHP_EP1";

正しい宣言

char VidPid[]="vid_04d8&pid_fc5f";
char pipename[]="\\MCHP_EP1";

Firgelli LACボードの場合、INおよびOUTパイプで使用できるエンドポイント1のみがあることに注意してください。

これにより、無駄のないドキュメントを回避しようとして私と同じくらい多くの時間を費やし、FirgelliLACボードのVisualC++の例がない人に発生するフラストレーションの問題のいくつかが解決されることを願っています。

于 2012-02-24T07:13:32.177 に答える