C# und DE Interface

We proudly present: The release of DMXControl 3.3.3!


On September 29, 2026, we held our release show for DMXControl 3.3.3. During our usual “hour-long” session, we showed you all the new features in this version and what it now has to offer.
Read all about it in the corresponding news article: We proudly present: The release of DMXControl 3.3.3!


  • Hallo,

    ich versuche gerade meine angestaubten C# Kenntnisse zu reaktivieren und eine C# Mini DMX Programm zu schreiben. Dabei will ich ein DE Interface nutzen. Ich scheitre allerdings schon am Einbinden der usbdmx.dll. Kann hier jemand posten wie ich die DLL einbinde? In Digital Enlightenment Interface mit VB.net hab ich schon gefunden wie das mit der Struct gehen soll. Stehe jetzt allerdings vor dem Problem, wenn ich GetAllConnectedInterfaces aufrufen will, die Meldung kommt das die Funktion nicht PInvoke-kompatibel ist. Googlen hat mich nicht weiter gebracht, ich hab nur immer was mit Strings gefunden. ich hab aber doch nur Char und Bytes die übergeben werden?!

    Zusätzlich wäre ich über ein Beispiel wie man dann in C# Werte an die DLL übergibt dankbar.

    Alternativ reicht mit auch wenn mir jemand sagen könnte wie ich die usbdmxsi.dll korrekt einbinde. ich hab momentan:

    Code
    public class usbdmxsi
        {
            [DllImport("usbdmxsi.dll")]
            public static extern bool OpenInterface(ref long DMXOutArray, ref long DMXInArray, ref Byte Mode);
    
    
        }

    und hab aber auch schon statt long byte[] versucht, aber sobald die funktion aufgerufen wird und ein Interface angeschlossen ist, crasht die Anwendung ohne Fehler.

    Schon mal danke
    vogtjona

  • Hallo,

    ich habe gerade mal sharpdevelop angeworfen. Über die vorhandenen Infos konnte ich problemlos mal alle ConnectedInterfaces abholen.

    Ich bastle gerade eine kleine Klasse, welche die Verbindung zum Interface kapselt....
    Allerdings verwende ich die usbdmx.dll und nicht die usbdmxsi.dll

    Die structs habe ich von deinem verlinkten Formthread. Das ganze kurz zusammen gesetzt gibt etwa folgendes (das ist jetzt weder schön verpackt, noch so zu verwenden. Normalerweise sollten die external calls sauber gewrappt werden).

    Die restlichen Funktionen sehen auch nicht sonderlich kompliziert aus. Werde sie morgen wohl mal kurz in einer klasse schön verpacken. Ich denke, dass ich das in sehr kurzer Zeit funktionsfähig habe. Die Klasse erhaltet ihr natürlich hier als fertiges assembly inkl. code ;)

    Greets
    Phips

  • ich habs damit ansprechen können:

    reihenfolge ist: GetAllConnectedInterface, SetInterfaceMode,OpenLink. Und dann nurnoch CloseLink beim beenden.

  • Mangels Zeit und Terminen gestern, bin ich noch nicht so weit, wie ich sein wollte...
    Hoffe, dass ich das ganze schön verpackt heute Abend fertig kriege :D

    Greets
    Phips

  • Hallo zusammen,

    Die Ansteuerung des DE-Interfaces ist beinahe fertig gecoded. Es fehlt lediglich noch der Konfigurationsteil um eine erste Version fertig zu haben.
    Dabei bin ich jedoch noch auf einige Probleme gestossen, welche meiner Meinung nach aus dem Treiber des DE-Interface hervorgehen. Das Verhalten lässt sich auch im offiziellen Testprogramm reproduzieren. Da ich davon ausgehe, dass die Entwickler von DE hier auch mitlesen, poste ich das hier.

    Folgendes Problem taucht reproduzierbar auf:
    Im Betriebsmodus 6 (PCOut->DMXOut,DMXIn->PCIn) werden die Inputchangenotifications gefeuert.
    Im .Net habe ich einen Handler dafür registriert, welcher die Events auch erhält. Gemäss Beschreibung sollte dieser Callback nicht mehr als 1ms dauern. Daher habe ich das Eventing intern async gebaut. Der Callback setzt lediglich ein Flag, damit der NotificationThread weiss, dass er ein Event auslösen muss.
    Das Klapp auch so weit so gut. Das einzige Problem ist, dass der Treiber einen Stackoverflow erzeugt, wenn der UIThread (welcher für das Abfüllen der Kanalübersicht zwischenzeitlich belegt ist), nicht antwortet. Dabei geht die gesamte Applikation hops.

    Nein, ich habe keine Rekursion im .Net code, welche den Stackoverflow erzeugen würde! Auch erhalte ich keinen Stacktrace mehr und gehe daher davon aus, dass das ausserhalb von .Net geschieht. ;)

    Das Problem lässt sich zwar über fixe Scanintervalle reduzieren, aber ganz vermeiden lässt es sich nicht. Treffen viele Updates ein, kann das schon reichen, wenn der UIThread 100ms belegt ist. Auch die Test.exe schmiert willkürlich mit einem Fehler ab, wenn man am Fader für alle Channels dreht. Manchmal dauert es länger, manchmal geht es schneller. Hängt wohl ganz davon ab, wann das Update-Processing im UI läuft.

    Meine letzten Tests mit Debug.WriteLine() der ersten 12 Kanäle (ohne UI-Update) haben gezeigt, dass es auch da auftritt. Scanintervall war 1 Sekunde und mit vielen updates am Fader schafft man es dennoch.

    Ist das Phänomen bereits bekannt?

    Grüsse aus der Schweiz

    Phips

    Edit: noch einen passend Post im DE Forum erstellt: http://matthias.dempe.de/eforum25/show.…10508194017&u=1

    Greets
    Phips

    Edited once, last by Phips (May 8, 2011 at 8:00 PM).

  • Die Ansteuerung des DE-Interfaces ist beinahe fertig gecoded. Es fehlt lediglich noch der Konfigurationsteil um eine erste Version fertig zu haben.
    Dabei bin ich jedoch noch auf einige Probleme gestossen, welche meiner Meinung nach aus dem Treiber des DE-Interface hervorgehen. Das Verhalten lässt sich auch im offiziellen Testprogramm reproduzieren. Da ich davon ausgehe, dass die Entwickler von DE hier auch mitlesen, poste ich das hier.

    Ja das mit dem Testprogramm hab ich auch schon hin bekommen...

    Ich wollte mal fragen, ob sich was getan hat? Von den Entwicklern hat ja keiner was geschrieben... Kannst du vielleicht das was du hast zur Verfügung stellen? Und evtl. beschreiben, wie man das Problem am besten umschifft?

    Danke
    Jonathan

  • Hiho

    bitte entschuldigt mein Schweigen. Ich ziehe in einer Woche um und momentan geht es gerade chaotisch zu und her.
    Mein Code hat noch nicht die Stabilität erreicht, dass ich ihn schon freigeben würde. Ich habe seit der ersten Version nochmals einiges umgestellt und werde wohl noch das eine oder andere Umstellen und etwas anders machen.

    Das Problem konnte ich mehrheitlich lösen. Es war ein klassischer Eigen-DAU und ich hätte am liebsten die Tischkannte abgebissen, weil ich ja auch selbst drauf hätte kommen müssen.

    Der Punkt ist relativ einfach gewesen. Ich über gebe Callbackdelegates an die usbdmx.dll. Diese dll läuft nicht als managed Code und liegt somit ausserhalb des .Net Garbage Collectors. Wenn ich nun die Delegates einfach mit New übergebe und keine Referenz auf die Callback-Delegates halte, dann werden die irgendwann vom GC weggeräumt. Folglich kann der Callback dann nur noch abrauchen, da er in einen ungültigen Bereich zeigt. Nachdem ich das gelöst habe, waren die Callbacks stabil. (Danke an Soon5 ;) )

    Dafür bin ich in ein nächstes Problem gelaufen. Die Input-Array verhält sich hin und wieder merkwürdig. Wenn ich im Modus 6 bin und den output an den input angeschlossen habe, kann es vorkommen, dass die input byte[] einfach mit "false" überschrieben wird. Aus dem .Net dürfte es kaum möglich sein der array einen ungütligen Wert zuzuweisen. Woher das Verhalten kommt und wie es sich vermeiden lässt versuche ich noch heraus zu finden. Was ich jetzt schon sagen kann ist, dass die Arrays vom GC nicht weggeräumt und auch nicht umhergeschoben werden. Ich kriege ne Exception an den Kopf geworfen und wenn ich mich im Debugger etwas durchhangle, dann sehe ich, dass anstelle von byte[] der String (nicht bool wert) "false" drin steht.

    Sobald ich in der neuen Wohnung eingerichtet bin, werde ich mich wieder daran setzen das noch zu lösen.

    hope this helps

    Phips

    Greets
    Phips

  • Hi Phips,

    ich wollte mal hören ob du schon eingerichtet bist? Ich hab jetzt nämlich n paar Tage frei und wollte da gerne an meinem Projekt weiter basteln. Bloß das Interface ansprechen bekomme halt nicht hin.

    Wäre cool wenn du mir was schicken kannst...

    Lg
    Jonathan

  • Ups, da war ja noch was..

    Jup, der Umzug und die Flitterwochen waren richtig klasse ;)
    Mein Homeoffice steht wieder und ich denke, dass ich den Code rausgeben kann.
    Das DMX-In ist im Loopbackmodus noch nicht ganz stabil, aber daran arbeite ich noch. DMX-Out sollte problemlos laufen.

    Wenn ich @home bin, packe ich den Code mal zusammen.

    LG

    Phips

    Greets
    Phips

  • Den Code habe ich stabilisiert und nochmals etwas überarbeitet. Es steht noch ein Test auf meiner Maschine an, um auch sicher zu gehen, dass der DMX-In nun auch stabil läuft.
    Weiter warte ich noch auf eine Antwort von den DE-Entwicklern auf meine Mail und hoffe, dass diese in den nächsten zwei Tagen eintrifft.

    Ich denke, dass einem Release der aktuellen Version nächste Woche nichts mehr im Weg stehen sollte. Vorausgesetzt, dass ich am WE wirklich mal 1-2h Zeit für den Test finde.

    Greets
    Phips

  • Souko April 9, 2018 at 7:27 PM

    Added the label DE Interface
  • Newly created posts will remain inaccessible for others until approved by a moderator. The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.