Entfernen eines USB-Geräts erkennen

Gast #987958
Lesenswert?

Hallo zusammen,
ich arbeite mit einem Cypress FX2LP USB-Gerät. Dieses wird mittels 
LabView über eine von mir in C++ geschriebene DLL angesprochen. Es 
funktioniert auch alles hervorragend, aber wenn ich das Gerät abziehe 
scheint das der Cypress-Treiber nicht an meine DLL zu melden, sprich ich 
kann immer noch mit dem Treiber auf das nicht mehr vorhandene Gerät 
zugreifen... Die Cypress-API bietet zwar eine IsOpen-Abfrage, aber die 
kontrolliert nur ob das Handle zum Treiber gültig ist.

Nun wollte ich die wm_devicechange messages auswerten, das scheint aber 
nur in window procedures zu gehen, und die gibts aber glaub ich in dlls 
nicht.

Habt ihr ne Idee wie ich da herangehen könnte?

Gruß
DS
#988051
Lesenswert?

Aus dem BulkLoop Demo von Cypress:
1
LRESULT CBulkLoopDlg::OnPnpEvent(WPARAM wParam, LPARAM lParam) 
2
{
3
  if (wParam == DBT_DEVICEARRIVAL) 
4
    if (bDevNodeChange) 
5
      bArrived = true;
6

7
  if (wParam == DBT_DEVICEREMOVECOMPLETE) 
8
  {
9
    if (bDevNodeChange) {
10
      m_XferSize.SetWindowText("");
11
      m_SeedValue.SetWindowText("");
12
      m_FillPatternComBox.SetWindowText("");
13

14
      m_OutEndptComBox.ResetContent();
15
      m_InEndptComBox.ResetContent();
16

17
      bDevNodeChange = false;
18
    }
19
  }
20

21
  if (wParam == DBT_DEVNODES_CHANGED) 
22
  {
23
    bDevNodeChange = true;
24

25
    if (bArrived) {
26
      FindLoopDevice();
27
      bArrived = false;
28
      bDevNodeChange = false;
29
    }
30

31
  }
32

33
  return 0;
34
}

Damit bekommst du die Nachrichten.
Gast #989004
Lesenswert?

Hallo, irgendwie kapier ich das nicht. Ich hab in meiner DLL doch nur 
Funktionen, die kein Fenster haben.

Ich würde ja gern in meiner openDevice-Funktion den Nachrichtenempfang 
starten und beim closeDevice beenden. Heißt das, dass ich im openDevice 
ein Fenster öffnen müsste, welches eine Fensterprozedur öffnet, welche 
nun die Nachrichten empfängt?

@rufus:
wenn ich Code in die dllmain schreibe, wann wird der denn ausgeführt???

@christian:
hab mir den code mal angekuckt, woher bekomme ich denn den WPARAM und 
den LPARAM? Muss ich die mit new erstellen und die werden dann 
automatisch beschrieben oder gibt's die schon? Ist mir alles noch etwas 
undurchsichtig...
Gast #989523
Lesenswert?

Ich bekomm's einfach nicht hin. Da ich ja ne DLL hab gibt es keine 
Fenster und damit keine Fensterprozedur und damit keine Wparam und 
lParam.

Vielleicht steh ich ja auch nur auf dem Schlauch, aber bitte erklärts 
mir genauer...

Danke schonmal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren