Erstellung einer DLL
PureBasic ermöglicht das Erstellen einer Standard Microsoft Windows DLL (Dynamic Linked Library). 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 Anwender: es gibt 4 spezielle Prozeduren, die von Windows 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 Rückgabe von Strings aus DLL's:- Die Deklaration von Arrays und LinkedLists mittels Dim bzw. NewList muss stets innerhalb der Prozedure 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.
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.
Beispiel:
String.s = PeekS(CallFunction(0,"FunctionName",Parameter1,Parameter2))Nachfolgend noch ein komplettes Code-Beispiel:
Beispiel
DLLSample.pb