ERROR_INVALID_HANDLE - PullRequest
       20

ERROR_INVALID_HANDLE

0 голосов
/ 24 февраля 2012

Я пытаюсь использовать следующие функции, определенные в 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, но я не уверен, как это проверить / исправить.

1 Ответ

0 голосов
/ 24 февраля 2012

OK понял это.

Неправильная декларация:

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

Правильная декларация

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

Обратите внимание, что для платы Firgelli LAC существует только конечная точка 1доступны для каналов IN и OUT.

Я надеюсь, что это решит некоторые проблемы разочарования, возникающие у тех, кто потратил столько времени, сколько я пытался обойти их скудную документацию, а примеров Visual C ++ дляFirgelli LAC Board.

...