Seite 2 von 2

Verfasst: 10.12.2008 23:03
von ZeHa
Susan20 hat geschrieben:Nee, leider ist keine Doku bei den DLLs dabei. Ich glaube, Olympus will, dass man die Olympus-Abspielsoftware kauft und nicht, dass man sich was eigenes schreibt. :cry:
Gibt's von der Software irgendwie 'ne Demo oder sowas?

Verfasst: 10.12.2008 23:08
von edel
Du muesstest ja nur ein Callback fuer das Fenster anlegen und dort
WM_DVR_PUSHCHANGE abfangen. Aber dafuer benoetigst du einen
Header oder Doku usw.

Verfasst: 11.12.2008 10:26
von Susan20
@Edel: Ich denke, dass die im C-Programm verwendeten Konstanten wie z.B. WM_DVR_PUSHCHANGE in der DLL festgelegt sind. Leider durchblicke ich den C-Code nicht, warum es einen Window-Callback gibt. Wenn ich zu Testzwecken einfach nur eine Meldung haben will wie "Rechte Fußtaste wurde gedrückt", dann brauche ich doch kein Fenster!?

Verfasst: 11.12.2008 11:38
von edel
Der Treiber muss die Nachricht irgendwo hinschicken. Kann natuerlich
auch sein das du da einen Befehl hast um den Status manuell abzufragen.
Solange du aber nicht weisst welche Werte die Konstanten haben, sieht
das ganze recht duester aus. Was du brauchst ist ein Entweder nen SDK
oder vorhandene Software selber Debuggen z.B. mit Olly
http://www.ollydbg.de/

Verfasst: 11.12.2008 11:43
von Susan20
Danke, edel, für den Tipp. Leider schaffe ich es heute nicht mehr, werde es aber morgen ausprobieren! :)

Verfasst: 12.12.2008 12:23
von Susan20
@edel: Ich habe es geschafft, und zwar ohne ollydbg. Ich habe einfach Deine Tipps "Callback für Fenster" und "Header" aufgeschnappt. Aus dem Link auf das C-Programm (Danke, bobobo!) habe ich die Paramter rausgekriegt wie pointer auf integer-Var und Windows-Handle. Und dann habe ich über die EventwParam()-Funktion die Konstanten für die einzelnen Aktionen in Erfahrung gebracht und als Nebenprodukt gab es dann auch den Wert für den Event.

Nochmal vielen Dank an alle für die Hilfe. Hier ist der Code (klar, damit kann jetzt wahrscheinlich keiner etwas anfangen, trotzdem .... )

Code: Alles auswählen

OpenLibrary(0, "drv_foot_pedal.dll")

inf = 0
erg = CallFunction(0, "GetFootSWInfo", @inf)
If erg = 7
   MessageRequester("Info", "Kein Fußschalter angeschlossen!")
   Goto ende
EndIf

#window = 0
OpenWindow(#window, 317, 319, 500, 200, "Fußschalter",  #PB_Window_SystemMenu); | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )

CreateGadgetList(WindowID(#window))
TextGadget(1, 50, 50, 200, 30, "Auf geht's!")

hdl.l = WindowID(#window)
CallFunction(0, "OpenUSBFootSW", hdl, 0)

#PEDAL_EVENT = 1525
#RIGHT_ON = 2
#RIGHT_OFF = 32770
#LEFT_ON = 4
#LEFT_OFF = 32772
#MIDDLE_ON = 8
#MIDDLE_OFF = 32776

Repeat
   event = WindowEvent(); WaitWindowEvent()
   If event  = #PEDAL_EVENT
       Select EventwParam()
          Case #RIGHT_ON
              SetGadgetText(1,"Rechter Fußtaster gedrückt!")
          Case #RIGHT_OFF
              SetGadgetText(1,"Rechter Fußtaster frei!")
          .
          .
          .
         EndSelect
  
    EndIf
Until event = #PB_Event_CloseWindow

ende:

Verfasst: 12.12.2008 12:47
von Kiffi
@Susan20: Hier die obligatorische Klugscheisser-Antwort auf Deinen Code:

* Goto ist böse! Nicht verwenden!

* OpenLibrary() hat einen Rückgabewert, den man auswerten sollte.

* Wenn OpenLibrary(), dann auch CloseLibrary()

* Wenn es denn unbedingt WindowEvent() sein muss, dann auch noch ein
Delay() einbauen, weil es Dir sonst Deine CPU verbrutzelt und die anderen
Applilationen keine Luft mehr bekommen.

* Zu OpenUSBFootSW gibt es bestimmt auch noch ein entsprechendes Close*, oder?

Grüße ... Kiffi (ja, ich weiß, dass der Code nur für Dich ist, aber je mehr
Du es verinnerlichst, desto besser ;-))

Verfasst: 12.12.2008 13:02
von Susan20
@Kiffi: Bin für jede Verbesserung dankbar. Ich will ja schließlich, dass es rund läuft. :)

Verfasst: 13.12.2008 18:25
von Falko
Habe die Diskussion über Goto abgeschnitten.
Kiffi hat geschrieben:* Goto ist böse! Nicht verwenden!
Besser ausgedrückt: Goto sollte man möglichst vermeiden.
Da bei unüberlegten Programmsprüngen unerklärliche Endlosschleifen als
auch Programmabbrüche entstehen könnten.

Also bitte hier keine weitere Goto-Diskussion mehr, damit das Thema von
Susan20 nicht verfehlt wird. Den Anhang habe ich im Mülleimer abgezwickt.