Wie werden Parametertypen in ext. DLLs "erklärt"?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Wie werden Parametertypen in ext. DLLs "erklärt"?

Beitrag von Kurzer »

Hallo,

ich bastle gerade an der Hilfe zu einem meiner Programme.
Dabei geht es darum, daß man die Funktionalität des Programms durch eine eigene, externe DLL erweitern kann.

Die externe DLL muß eine öffentliche Funktion Namens DoAction(Param1.s, Param2.s) haben. Diese Funktion innerhalb der fremden DLL wird von meinem Programm aufgerufen.

Ich weiß jetzt leider nicht wie die beiden Stringparameter außerhalb der PB-Welt übergeben werden. Sind das Zeiger auf nullterminierte Strings oder was hat z.B. ein C-Programmierer zu erwarten, wenn ich schreibe es werden Strings als Parameter übergeben?

Ich poste hier mal den relevanten Teil meiner Hilfe... es wäre nett, wenn jemand, der einer anderen Programiersprache mächtig ist, beurteilen würde, ob mene Angaben ausreichend und vor allen Dingen richtig sind.
meine Hilfe hat geschrieben: Was tut ein Plugin?
Ein Plugin kann als externe "Programmerweiterung" für DB-Scanner betrachtet werden.
Physikalisch handelt es sich dabei um eine DLL-Datei (Dynamic Link Library), die weitere Funktionen zur Verfügung stellt.

Ein DB-Scanner-kompatibles Plugin hat die Aufgabe die Daten des im Meldungsfenster angeklickten Datensatzes weiterzuverarbeiten. Dazu muß das Plugin (resp. die DLL) zwei öffentliche Funktionen zur Verfügung stellen.

DoAction(Param1.string, Param2.string)
Configuration()

Die Funktion DoAction() wird direkt bei einem Doppelklick aufgerufen. Ihr werden zwei Parameter als nullterminierte Strings übergeben.
In Parameter 1 wird der Wert der Schlüsselspalte übergeben, in Parameter 2 die Werte aller weiteren Spalten - getrennt durch ein #10 ASCII-Zeichen.

Die Funktion Configuration() wird aufgerufen, sobald im Einstellungsfenster der Button [Plugin konfigurieren] gedrückt wird. Hiermit können innerhalb des Plugins nötige Konfigurationen aufgerufen werden. Enthält die DLL keine Funktion mit Namen Configuration(), dann ist der Button deaktiviert.

Die Plugins müssen im Unterverzeichnis "Plugins" innerhalb des Programmverzeichnisses liegen. Alle Dateien, die dort liegen und auf .dll enden, werden als potentielles DB-Scanner Plugin angesehen. Es erfolgt eine Prüfung, ob die DLLs eine öffentliche Funktion namens DoAction() beinhalten. Alle DLLs, die diese Prüfung bestehen, werden im Einstellungsfenster in der Auswahlliste "verwendetes Plugin" angezeigt.
Besten Dank :allright:

Hier auch nochmal der Auszug aus einer passenden Test-DLL, die in PB geschrieben ist:

Code: Alles auswählen

ProcedureDLL DoAction(Key$, OtherColumns$)

  MessageRequester(Key$, OtherColumns$, #MB_ICONINFORMATION)

EndProcedure
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Genau, es werden lediglich Pointer (32-Bit) auf nullterminierte
Strings erwartet. Was für andere auch noch wichtig ist, ist die Information
der Aufrufkonvention deiner DLL ... PureBasic verwendet als Standard
"stdcall" (bei "ProcedureDLL"/ "DeclareDLL")
In wie weit das aber angegeben werden sollte, weis ich nicht. Laut
PB-Hilfe ist "stdcall" auf Windows Standard.
http://de.wikipedia.org/wiki/Aufrufkonvention

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten