Erstellung einer DLL
PureBasic ermöglicht das Erstellen einer Standard Microsoft Windows DLL ("Dynamic Linked Library"), "shared objects" (.so) auf Linux, und "dynamic libraries" (.dylib) auf MacOS X. Der DLL Code entspricht "normalem" PureBasic Code, mit der Ausnahme, dass außerhalb von Prozeduren kein eigentlicher Programmcode geschrieben werden sollte.Beispiel
ProcedureDLL MyFunction() MessageRequester("Hallo", "Dies ist eine PureBasic DLL !", 0) EndProcedure ; Hier das Client Programm, welches die DLL benutzt ; If OpenLibrary(0, "PureBasic.dll") CallFunction(0, "MyFunction") CloseLibrary(0) EndIfNur für fortgeschrittene Programmierer: Es gibt 4 spezielle Prozeduren, die vom OS automatisch aufgerufen werden, wenn eines der folgenden Ereignisse auftritt:Um diese Ereignisse zu verwalten, ist es möglich, 4 spezielle Prozeduren zu deklarieren: AttachProcess(Instanz), DetachProcess(Instanz), AttachThread(Instanz) und DetachThread(Instanz). Dies bedeutet, dass diese 4 Prozedur-Namen reserviert sind und vom Programmierer nicht für andere Zwecke verwendet werden können.- DLL wurde zu einem neuen Prozess hinzugefügt
- DLL wurde von einem Prozess entfernt
- DLL wurde zu einem neuen Thread hinzugefügt
- DLL wurde von einem Thread entfernt
Hinweise zur Erstellung von DLL's:Hinweise zur Rückgabe von Strings aus DLL's:- Die Deklaration von Arrays, Listen bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
- Schreiben Sie keinen Programmcode außerhalb von Prozeduren. Als Ausnahmen erlaubt sind lediglich Variablen- oder Strukturen-Deklarationen.
- DirectX Initialisierungsroutinen dürfen nicht innerhalb der AttachProcess Prozedur geschrieben werden.
Bei der Rückgabe von Strings aus einer DLL-Funktion muß der String als Global deklariert sein.
Beispiel
Global ReturnString$ ProcedureDLL.s MyFunction(var.s) ReturnString$ = var + " test" ProcedureReturn ReturnString$ EndProcedureOhne die Deklaration als Global ist der String nur Lokal in der ProcedureDLL verfügbar und kann somit nicht außerhalb verwendet werden.
Bei der Verwendung von CallFunction() (oder einer ihrer verwandten CallXXX-Funktionen) auf eine DLL-Funktion wird bei der Rückgabe eines Strings immer ein Zeiger auf diesen zurückgegeben, welcher mit PeekS() ausgelesen werden muss.
Beispiel
String.s = PeekS(CallFunction(0, "FunctionName", Parameter1, Parameter2))Nachfolgend noch ein komplettes Code-Beispiel:
Beispiel
DLLSample.pb