Wednesday, 15 April 2015

c# - error 0x80131623 appears when I closed UI -



c# - error 0x80131623 appears when I closed UI -

i'm trying find vendor id , product id of usb card. purpose, utilize setupapi.dll. when closed programme have 0x80131623 (2146232797) appears. don't know how can prepare it.

my code :

result = hidd_gethidguid(ref hidguid); deviceinfoset = setupdigetclassdevs(ref hidguid, intptr.zero, intptr.zero, 18); { sp_device_interface_data mydeviceinterfacedata = new sp_device_interface_data(); mydeviceinterfacedata.cbsize = 28; result = setupdienumdeviceinterfaces(deviceinfoset, intptr.zero, ref hidguid, memberindex, ref mydeviceinterfacedata); //int lasterror = marshal.getlastwin32error(); if (result != 0) { //sp_devinfo_data mydeviceinfodata = new sp_devinfo_data(); //mydeviceinfodata.cbsize = marshal.sizeof(mydeviceinfodata); //premier appel pour obtenir la taille du buffer result = setupdigetdeviceinterfacedetail(deviceinfoset, ref mydeviceinterfacedata, intptr.zero, 0, out neededsize, intptr.zero); //int lasterror = marshal.getlastwin32error(); int requiredsize = (int)neededsize; sp_device_interface_detail_data mydeviceinterfacedetaildata = new sp_device_interface_detail_data(); if (intptr.size == 8) // 64 bit operating systems mydeviceinterfacedetaildata.cbsize = 8; else mydeviceinterfacedetaildata.cbsize = 4 + marshal.systemdefaultcharsize; // 32 bit systems intptr detaildatabuffer = marshal.allochglobal(requiredsize); marshal.structuretoptr(mydeviceinterfacedetaildata, detaildatabuffer, true); result = setupdigetdeviceinterfacedetail(deviceinfoset, ref mydeviceinterfacedata, detaildatabuffer, requiredsize, out neededsize, intptr.zero); int lasterror = marshal.getlastwin32error(); //string instanceid = marshal.ptrtostringauto(detaildatabuffer); marshal.ptrtostructure(detaildatabuffer, mydeviceinterfacedetaildata); if (mydeviceinterfacedetaildata.devicepath.indexof("vid_04fa&pid_9123") != -1) { marshal.freehglobal(detaildatabuffer); marshal.freehglobal(deviceinfoset); homecoming true; } memberindex++; marshal.freehglobal(detaildatabuffer); } else { //int lasterror = marshal.getlastwin32error(); } if (memberindex>=16) { lastdevice = true; } } while (lastdevice == false); marshal.freehglobal(deviceinfoset); homecoming false; }

i think problem caused marshaling.

c# error-handling pinvoke

No comments:

Post a Comment