Pluginentwicklung: Unterschied zwischen den Versionen

Aus PC_DIMMER
Wechseln zu: Navigation, Suche
(Deutsch)
(Zu exportierende Funktionen)
Zeile 50: Zeile 50:
 
Hier wird die Version des Plugins übergeben - wird aber nicht wirklich ausgewertet
 
Hier wird die Version des Plugins übergeben - wird aber nicht wirklich ausgewertet
  
 +
 +
  function DLLGetResourceData(const ResName: PChar; Buffer: Pointer; var Length: Integer):boolean;stdcall;
 +
 +
Gibt die vom Hauptprogramm angeforderte Resource "ResName" über "Buffer" zurück. "Buffer" ist hierbei vom Hauptprogramm über die zuvor aufgerufene Funktion DLLGetResourceSize() entsprechend in der Größe dimensioniert.
 +
 +
 +
  function DLLGetResourceSize(const ResName: PChar): Integer; stdcall;
 +
 +
Gibt dem Hauptprogramm die Größe der Resource zurück, damit "Buffer" in der Funktion DLLGetResourceData() entsprechend dimensioniert werden kann.
  
 
   procedure DLLConfigure;stdcall;
 
   procedure DLLConfigure;stdcall;
Zeile 74: Zeile 83:
  
 
Wird z.B. bei jeder Kanalwertänderung aufgerufen. Zusätzlich wird die Funktion aufgerufen, wenn z.B. ein neues Projekt angelegt wird und viele andere Ereignisse. MSG gibt die Art der Nachricht an (siehe [[Nachrichtensystem]]). Data1 und Data2 beinhalten Daten, wie z.B. Kanaladresse und Kanalwert.
 
Wird z.B. bei jeder Kanalwertänderung aufgerufen. Zusätzlich wird die Funktion aufgerufen, wenn z.B. ein neues Projekt angelegt wird und viele andere Ereignisse. MSG gibt die Art der Nachricht an (siehe [[Nachrichtensystem]]). Data1 und Data2 beinhalten Daten, wie z.B. Kanaladresse und Kanalwert.
 
 
 
 
 
 
  
 
==Callback-Funktionen==
 
==Callback-Funktionen==

Version vom 14. Dezember 2015, 23:29 Uhr

Deutsch

Um den PC_DIMMER mit Funktionen zu erweitern kann man eigene Plugins entwickeln. Man kann folgende Beispielprojekte mit Sourcecode verwenden, um eigene Plugins zu entwickeln:


Ausgabe- und Programmplugins besitzen im Prinzip die gleiche Pluginsstruktur, werden jedoch in der Oberfläche anders dargestellt. Es genügt in der Funktion "DLLIdentify" zwischen "Output" und "Input" zu wechseln, um das Plugin entweder in der Interfacelist oder dem Pluginmenü im Hauptmenü des Programmes anzuzeigen.

Die Funktionen DLLAbout und DLLConfigure werden zudem nur bei Ausgabeplugins unterstützt. Statt DLLConfigure muss bei Programmplugins die Funktion DLLShow verwendet werden, um das Plugin bei einem Klick auf den Menüpunkt anzuzeigen.


Zum einfachen Testen von eigenen Plugins wird mit dem PC_DIMMER im Installationsverzeichnis ein Plugintester mitgeliefert. Man kann seine eigenen DLLs einfach auf die EXE-Datei per Drag&Drop ziehen und das Plugin wird entsprechend ausgeführt.


Zu exportierende Funktionen

 procedure DLLCreate(CallbackSetDLLValues,CallbackSetDLLValueEvent,CallbackSetDLLNames, CallbackGetDLLValue,CallbackSendMessage:Pointer);stdcall;

Diese Funktion wird beim Aktivieren des Plugins aufgerufen. Dabei werden Pointer für Callbackfunktionen mitgeliefert. Möchte man diese Funktionen verwenden, um Daten zum PC_DIMMER zu senden (z.B. DMX-In Daten) dann kann man sich die Pointer auf seine Funktionsprototypen zuweisen. Die Callbackfunktionen sind weiter unten beschrieben.


 procedure DLLStart;stdcall;

Diese Funktion wird nach dem DLLCreate(...) aufgerufen. Man kann hier Timer starten oder sonstige Aktionen beginnen. Erzeugen und Starten von Objekten/Ereignissen ist somit getrennt.


 function DLLDestroy:boolean;stdcall;

Wird beim Deaktiveren des Plugins aufgerufen. Es sollten alle Objekte und Instanzen beendet werden, die bei DLLCreate(...) erzeugt wurden.


 function DLLIdentify:PChar;stdcall;

Hier wird dem PC_DIMMER lediglich mitgeteilt, ob das Plugin ein Ausgabeplugin (result='Output'), oder ein Programmplugin (result='Input') ist. Ist ein wenig Umständlich, aber so konnte ich damals nur programmieren :)


 function DLLGetName:PChar;stdcall;

Hier wird der Name des Plugins übergeben


 function DLLGetVersion:PChar;stdcall;

Hier wird die Version des Plugins übergeben - wird aber nicht wirklich ausgewertet


 function DLLGetResourceData(const ResName: PChar; Buffer: Pointer; var Length: Integer):boolean;stdcall;

Gibt die vom Hauptprogramm angeforderte Resource "ResName" über "Buffer" zurück. "Buffer" ist hierbei vom Hauptprogramm über die zuvor aufgerufene Funktion DLLGetResourceSize() entsprechend in der Größe dimensioniert.


 function DLLGetResourceSize(const ResName: PChar): Integer; stdcall;

Gibt dem Hauptprogramm die Größe der Resource zurück, damit "Buffer" in der Funktion DLLGetResourceData() entsprechend dimensioniert werden kann.

 procedure DLLConfigure;stdcall;

Wird aufgerufen, wenn man in den erweiterten Einstellungen auf "Konfigurieren" klickt


 procedure DLLAbout;stdcall;

Wird aufgerufen, wenn man in den erweiterten Einstellungen auf "Infos" klickt


 procedure DLLSendData(address, startvalue, endvalue, fadetime:integer;name:PChar);stdcall;

Wird z.B. beim Start einer Szene aufgerufen


 function DLLIsSending:boolean;stdcall;

Um Feedbackschleifen zwischen DMX-In und DMX-Out zu verhindern, muss das Plugin ein IsSending=true senden, bevor es einen Wert an das Hauptprogramm schickt.


 procedure DLLSendMessage(MSG:Byte; Data1, Data2:Variant);stdcall;

Wird z.B. bei jeder Kanalwertänderung aufgerufen. Zusätzlich wird die Funktion aufgerufen, wenn z.B. ein neues Projekt angelegt wird und viele andere Ereignisse. MSG gibt die Art der Nachricht an (siehe Nachrichtensystem). Data1 und Data2 beinhalten Daten, wie z.B. Kanaladresse und Kanalwert.

Callback-Funktionen

 CallbackSetDLLValues= procedure(address,startvalue,endvalue,fadetime,delay:integer);stdcall;

Hiermit kann man einen Wert an den PC_DIMMER senden. BEi Fadezeit>0 wird entsprechend eingeblendet, bei Delay>0 der Befehl entsprechend später ausgeführt.


 CallbackSetDLLValueEvent= procedure(address,endvalue:integer);stdcall;

Hiermit kann man einen Wert in die Data-In-Steuerung senden. Vor allem für DMX-In-Daten gedacht.


 CallbackSetDLLNames= procedure(address:integer;channelname:PChar);stdcall;

Hier kann man einen Kanalnamen ändern. Diese Funktion hat keinen größeren Sinn mehr in neueren PC_DIMMER-Versionen


 CallbackGetDLLValue= function(address:integer):integer;stdcall;

Hier kann man einen Kanalwert des PC_DIMMERs abfragen.


 CallbackSendMessage= procedure(MSG: Byte; Data1, Data2:Variant);stdcall;

Entsprechend dem Artikel zum Nachrichtensystem kann man eigene Nachrichten senden, um z.B. einen neuen Szenentyp zu erstellen, einen eigenen Befehl im PC_DIMMER zu installieren, eine Szene zu öffnen, ein neues Projekt zu erstellen, etc.

English