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