DLL-Modul selbst erstellen

Antworten
knox
Beiträge: 13
Registriert: Samstag 28. November 2009, 16:56
Wohnort: Nähe KA, aber Pfalz

DLL-Modul selbst erstellen

Beitrag von knox » Samstag 28. November 2009, 17:11

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?

abacom
Site Admin
Beiträge: 3971
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DLL-Modul selbst erstellen

Beitrag von abacom » Montag 30. November 2009, 08:54

"Wie kann meine DLL wissen, um welches der gleichartigen Bauteile mit unterschiedlichen Pinzahlen es sich handelt?"

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

Mike D
Beiträge: 528
Registriert: Dienstag 14. Oktober 2008, 14:48
Wohnort: Elbe- Weser-Dreieck

Re: DLL-Modul selbst erstellen

Beitrag von Mike D » Montag 30. November 2009, 13:34

@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

knox
Beiträge: 13
Registriert: Samstag 28. November 2009, 16:56
Wohnort: Nähe KA, aber Pfalz

Re: DLL-Modul selbst erstellen

Beitrag von knox » Montag 30. November 2009, 17:34

@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.

abacom
Site Admin
Beiträge: 3971
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DLL-Modul selbst erstellen

Beitrag von abacom » Dienstag 1. Dezember 2009, 10:53

Es gäbe da auch noch...

Code: Alles auswählen

Code: 
Procedure InitValues(POutput,PUser: PDLLParams); 
bzw. 
Code: 
void _stdcall CInitValues(double *POutput, double *PUser) 
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 ;-)
ABACOM support

knox
Beiträge: 13
Registriert: Samstag 28. November 2009, 16:56
Wohnort: Nähe KA, aber Pfalz

Re: DLL-Modul selbst erstellen

Beitrag von knox » Dienstag 1. Dezember 2009, 12:16

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!

abacom
Site Admin
Beiträge: 3971
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DLL-Modul selbst erstellen

Beitrag von abacom » Dienstag 1. Dezember 2009, 12:19

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.
CInitValues wurde in meinen Versuchen nicht ein einziges Mal aufgerufen!
...dann haben Sie entweder nicht PL4 oder Sie müssen noch das aktuelle Update installieren.
ABACOM support

knox
Beiträge: 13
Registriert: Samstag 28. November 2009, 16:56
Wohnort: Nähe KA, aber Pfalz

Re: DLL-Modul selbst erstellen

Beitrag von knox » Samstag 5. Dezember 2009, 19:20

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...

BKGMX
Beiträge: 132
Registriert: Montag 7. Dezember 2009, 10:37
Wohnort: Berlin

Re: DLL-Modul selbst erstellen

Beitrag von BKGMX » Montag 7. Dezember 2009, 10:53

Hallo,
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;
Aber wie setze ich die Anzahl der Outputs? Die sind doch als Konstante definiert?
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;
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

Antworten

Zurück zu „DLL-Programmierung“