DLL-Modul selbst erstellen
DLL-Modul selbst erstellen
Ich habe angefangen, ein eigenes Modul zum Laden mit dem DLL-Modul zu erstellen. Nach vielen Anfangskrämpfen habe ich jetzt eine ganz passable Version.
Mein Modul soll eine wählbare Zahl von Pins besitzen (der Nutzer kann einstellen, wieviele gleichartige Baugruppen im Modul enthalten sind). Dies funktioniert auch, wenn der Nutzer das Modul nur einmal benötigt oder in allen Modulen dieselben Pinzahlen sind.
Die Aufrufe NumInputs und NumOutputs haben jedoch keine Parameter, die auf die rufende Baugruppe schließen lassen.
Wie kann meine DLL wissen, um welches der gleichartigen Bauteile mit unterschiedlichen Pinzahlen es sich handelt?
Mein Modul soll eine wählbare Zahl von Pins besitzen (der Nutzer kann einstellen, wieviele gleichartige Baugruppen im Modul enthalten sind). Dies funktioniert auch, wenn der Nutzer das Modul nur einmal benötigt oder in allen Modulen dieselben Pinzahlen sind.
Die Aufrufe NumInputs und NumOutputs haben jedoch keine Parameter, die auf die rufende Baugruppe schließen lassen.
Wie kann meine DLL wissen, um welches der gleichartigen Bauteile mit unterschiedlichen Pinzahlen es sich handelt?
Re: DLL-Modul selbst erstellen
"Wie kann meine DLL wissen, um welches der gleichartigen Bauteile mit unterschiedlichen Pinzahlen es sich handelt?"
Aus der Anleitung:
Aus der Anleitung:
Die Variable PUser^[100] wird von ProfiLab gesetzt, und enthält die Nummer des DLL-Bauteils in Ihrem Projekt: 1 für DLL1, 2 für DLL2, usw.
ABACOM support
Re: DLL-Modul selbst erstellen
@abacom
die NumInputs(), NumOutputs(), GetInputName und GetOutputName haben da aber leider keinen Zugriff drauf. Es währe sehr hilfreich und würde die Einsatzmöglichkeit stark erhöhen wenn das ginge.
Mir ist aber voll bewussst das solche Sachen aus Kompatibilitätsgründen nicht einfach nachgerüstet werden können.
@knox
Man könnte es mit einer gemeinsamen ini-Datei mit Abschnitten für jede Instanz versuchen und z.B. in einer globalen Variablen der DLL mitzählen wie oft NumInputs etc. schon aufgerufen wurde.
Grüße
Mike
die NumInputs(), NumOutputs(), GetInputName und GetOutputName haben da aber leider keinen Zugriff drauf. Es währe sehr hilfreich und würde die Einsatzmöglichkeit stark erhöhen wenn das ginge.
Mir ist aber voll bewussst das solche Sachen aus Kompatibilitätsgründen nicht einfach nachgerüstet werden können.
@knox
Man könnte es mit einer gemeinsamen ini-Datei mit Abschnitten für jede Instanz versuchen und z.B. in einer globalen Variablen der DLL mitzählen wie oft NumInputs etc. schon aufgerufen wurde.
Grüße
Mike
Re: DLL-Modul selbst erstellen
@abacom: Leider geht genau dieses nicht. Die Funktion NumInputs wird als erste aufgerufen (das ergaben zumindest meine Tests). Genau diese Funktion hat aber den Parameter PUser nicht!!! Jetzt sollte aber mein Modul die korrekte Nummer zurückliefern. Wie soll es das machen?
Es mag sein, dass ich hier etwas übersehe! Aber gesucht habe ich viel
@Mike D: habe ich mir auch überlegt, aber die Aufrufe von NumInputs kommen ja - für das gleiche Bautei - mehrfach! Und ganz habe ich die Systematik noch nicht durchschaut.
Es mag sein, dass ich hier etwas übersehe! Aber gesucht habe ich viel
@Mike D: habe ich mir auch überlegt, aber die Aufrufe von NumInputs kommen ja - für das gleiche Bautei - mehrfach! Und ganz habe ich die Systematik noch nicht durchschaut.
Re: DLL-Modul selbst erstellen
Es gäbe da auch noch...
Siehe auch:
viewtopic.php?f=31&t=705&hilit=DLLInit
Ich hatte Herrn Bangert damals so verstanden, dass er noch die dreisprachige Dokumentation für diese Funktion liefern wollte
Code: Alles auswählen
Code:
Procedure InitValues(POutput,PUser: PDLLParams);
bzw.
Code:
void _stdcall CInitValues(double *POutput, double *PUser)
viewtopic.php?f=31&t=705&hilit=DLLInit
Ich hatte Herrn Bangert damals so verstanden, dass er noch die dreisprachige Dokumentation für diese Funktion liefern wollte
ABACOM support
Re: DLL-Modul selbst erstellen
Ich habe alles gelesen und eigentlich nur herausgelesen, dass es hier keine Lösung geben wird!
Eigentlich schade - ein an vielen Stellen brauchbares bis gutes Produkt so auflaufen zu lassen.
Ich zumindest werde eben andere Wege gehen ....
Ach ja: CInitValues wurde in meinen Versuchen nicht ein einziges Mal aufgerufen!
Eigentlich schade - ein an vielen Stellen brauchbares bis gutes Produkt so auflaufen zu lassen.
Ich zumindest werde eben andere Wege gehen ....
Ach ja: CInitValues wurde in meinen Versuchen nicht ein einziges Mal aufgerufen!
Re: DLL-Modul selbst erstellen
Dann haben Sie offensichtlich etwas falsch verstanden. INITVALUES wird beim Laden der DLL aufgerufen und
bekommt auch auch PUSER^ übergeben, so wie es gewünscht war.
bekommt auch auch PUSER^ übergeben, so wie es gewünscht war.
...dann haben Sie entweder nicht PL4 oder Sie müssen noch das aktuelle Update installieren.CInitValues wurde in meinen Versuchen nicht ein einziges Mal aufgerufen!
ABACOM support
Re: DLL-Modul selbst erstellen
Ja, ich hatte etwas falsch verstanden. Nachdem ich den Entry CInitValues in meine *.def-Datei eingetragen hatte ging es auch! Microsoft hat ja NUR 3 verschiedene Möglichkeiten für diesen Vorgang...
Re: DLL-Modul selbst erstellen
Hallo,
mich interessiert dieses Thema auch.
Initvalues wird zwar bei mir augerufen z.B.
Aber wie setze ich die Anzahl der Outputs? Die sind doch als Konstante definiert?
Eine Definition als Variable hilft auch nicht:
In den Eigenschaften der DLL wird dann zwar NumOutputs = 2 angezeigt, aber in der graphischen Darstellung sind es immer noch 4 Ausgänge.
Vielen Dank
mich interessiert dieses Thema auch.
Initvalues wird zwar bei mir augerufen z.B.
Code: Alles auswählen
Procedure InitValues(POutput,PUser: PDLLParams);
begin
messagebeep(0);
end;
Eine Definition als Variable hilft auch nicht:
Code: Alles auswählen
var
Outputs : Byte = 4;
Procedure InitValues(POutput,PUser: PDLLParams);
begin
Outputs := 2; // nur so als Test
end;
Vielen Dank