Modul BaseClass ClassDispatch inklusive ClassFactory
Verfasst: 23.03.2017 23:55
Wie angekündigt ist jetzt die BassClass als ClassDispatch inklusive ClassFactory für eigene registrierte DLL verfügbar.
Somit kann man jetzt ohne viel Aufwand mit Purebasic DLL´s erstellen die man zum Beispiel in VBScript oder in Excel verwenden kann.
Es gibt drei möglichenkeiten die Methoden zu erstellen.
1. Methode
Die Methode hat die gleichen Argumente wie die Dispatch Invoke.
2. Methode
Es wird eine eigene Methode 'DispInvoke' erstellt mit den Argumenten von Dispatch Invoke.
Dazu wird eine Procedure mit den Prefix 'Disp' für die Methode erstellt.
Aus dieser wird dann die Methode aufgerufen.
3. Methode
Es wird eine Methode erstellt mit zusätzlichen Type Information über die Argumente. Es können Methoden mit bis zu acht Argumente definiert werden.
Es gib folgende Schlüsselnamen für die Datentypen.
- Bool, Integer, Long, Quad, Float, Double, String, Date, Variant
Zusätzlich gibt es folgende Datentypen für den Rückgabewert der Methode.
- Void, Object
Properties definieren:
Es gibt die möglichkeit die Properties für den direkten Zugriff zu definieren.
Dazu gibt es folgende Macros:
- UseProperty(sProperty), DefineProperty(Name), DefinePropertyDate(Name)
- DefinePropertyVariant(Name), DefinePropertyVariantByRef(Name)
Und mit eigenen Name
- DefinePropertyAs(Name, sProperty) and DefinePropertyDateAs(Name, sProperty)
- DefinePropertyVariantAs(Name, sProperty), DefinePropertyVariantByRefAs(Name, sProperty)
Entwickler Diagnose:
Zum testen der COM-DLL gibt es die möglichkeit Logfiles zu erstellen.
Hierfür gibt es die Macros 'ClassDebug' und 'ClassDebugEx'
Um alles Debugfunktionen zu entfernen wird die konstante '#EnableClassDebug' auf false gestzt.
Für die COM-DLL benötig man eine eigene CLSID.
Diese kann mit folgenden Code ersteltt werden.
Registrierung der COM-DLL
Das Modul 'Modul_BaseClassDispatch.pb' liegt im englischen Forum.
Ist einfacher an einer Stelle zu pflegen
Link zum englischen Forum: http://www.purebasic.fr/english/viewtop ... 12&t=68101
Somit kann man jetzt ohne viel Aufwand mit Purebasic DLL´s erstellen die man zum Beispiel in VBScript oder in Excel verwenden kann.
Es gibt drei möglichenkeiten die Methoden zu erstellen.
1. Methode
Die Methode hat die gleichen Argumente wie die Dispatch Invoke.
2. Methode
Es wird eine eigene Methode 'DispInvoke' erstellt mit den Argumenten von Dispatch Invoke.
Dazu wird eine Procedure mit den Prefix 'Disp' für die Methode erstellt.
Aus dieser wird dann die Methode aufgerufen.
3. Methode
Es wird eine Methode erstellt mit zusätzlichen Type Information über die Argumente. Es können Methoden mit bis zu acht Argumente definiert werden.
Es gib folgende Schlüsselnamen für die Datentypen.
- Bool, Integer, Long, Quad, Float, Double, String, Date, Variant
Zusätzlich gibt es folgende Datentypen für den Rückgabewert der Methode.
- Void, Object
Properties definieren:
Es gibt die möglichkeit die Properties für den direkten Zugriff zu definieren.
Dazu gibt es folgende Macros:
- UseProperty(sProperty), DefineProperty(Name), DefinePropertyDate(Name)
- DefinePropertyVariant(Name), DefinePropertyVariantByRef(Name)
Und mit eigenen Name
- DefinePropertyAs(Name, sProperty) and DefinePropertyDateAs(Name, sProperty)
- DefinePropertyVariantAs(Name, sProperty), DefinePropertyVariantByRefAs(Name, sProperty)
Entwickler Diagnose:
Zum testen der COM-DLL gibt es die möglichkeit Logfiles zu erstellen.
Hierfür gibt es die Macros 'ClassDebug' und 'ClassDebugEx'
Um alles Debugfunktionen zu entfernen wird die konstante '#EnableClassDebug' auf false gestzt.
Für die COM-DLL benötig man eine eigene CLSID.
Diese kann mit folgenden Code ersteltt werden.
Code: Alles auswählen
Procedure.s CreateCLSID()
Protected Uuid.iid, result.s, i
UuidCreate_(Uuid.iid)
result = "DataSection" + #CRLF$
result + " CLSID_App:" + #CRLF$
result + " Data.l $" + RSet(Hex(Uuid\Data1), 8, "0") + #CRLF$
result + " Data.w $" + RSet(Hex(Uuid\Data2), 4, "0")
result + ", $" + RSet(Hex(Uuid\Data3), 4, "0") + #CRLF$
result + " Data.b $" + RSet(Hex(Uuid\Data4[0]), 2, "0")
For i = 1 To 7
result + ", $" + RSet(Hex(Uuid\Data4[i]), 2, "0")
Next
result + #CRLF$
result + "EndDataSection" + #CRLF$
Debug result
EndProcedure :CreateCLSID()
Zur Übersicht habe ich ein neues Beispiel erstellt.Registry DLL
For Registry DLL as 32bit DLL
%systemroot%\SysWow64\regsvr32.exe "FolderToDLL\YourDLL.dll"
As 64Bit DLL
%systemroot%\System32\regsvr32.exe "FolderToDLL\YourDLL.dll"
For Unregistry DLL as 32bit DLL
%systemroot%\SysWow64\regsvr32.exe -u "FolderToDLL\YourDLL.dll"
As 64Bit DLL
%systemroot%\System32\regsvr32.exe - u "FolderToDLL\YourDLL.dll"
Das Modul 'Modul_BaseClassDispatch.pb' liegt im englischen Forum.
Ist einfacher an einer Stelle zu pflegen
Link zum englischen Forum: http://www.purebasic.fr/english/viewtop ... 12&t=68101