DLL Importer für andere Sprachen

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

DLL Importer für andere Sprachen

Beitrag von remi_meier »

Hi

Habe dieses Tool für ein Projekt geschrieben, wird noch erweitert!

Was es macht:
Es liest einen PB-Code mit ProcedureDLLs aus und erzeugt dann daraus
nach Wahl include-Files für die Sprachen C, C++, PB, Blitz. Für C, C++
und PB wird die Import-Lib benötigt, für Blitz nur die DLL.

http://remi.secretly.de/downloads/headergen.exe
Einfach mit /? als Parameter starten.

Viel Spass!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Danke, sehr nützlich

aber ...
Wenn ich meinen Source "MyDLL.pbi" scanne, ist dieser anschließend futsch :mrgreen:

Vielleicht noch eine /OUT parameter oder eine Überprüfung?

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Oh sorry, werd ich gleich verbessern und wieder hochladen!

Edit: So, wird nun immer "lib" davor geschrieben und eine neue Option
/overwrite hinzugefügt. /out kommt ev. noch.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ist ja nichts passiert :wink: , ich teste mit Backups

Wunsch:
Profan Header erstellen: Extension = *.ph
Syntax:

Code: Alles auswählen

FunktionsName(= External("DLLName.dll","FunktionsName",;

EasyRequester(= External("PureBasic.dll", EasyRequester",;
Parameter nicht unbedingt erforderlich, können aber am ende als Bemerkung
angefügt werden, durch ' (Hochkomma) und parameter aufführen.

Es gibt schon ein paar PB-User, die auch Profan oder XProfan verwenden.
Wenns nicht zu schwör ist, bitte *ganzliebguck*
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ich möchte sowieso so viele Sprachen wie möglich unterstützen. Also wenn
du mir eine genaue Beschreibung aller Datentypen (+Pointer) geben
könntest, sowie diese Beschreibung der Profan-Header etwas genauer :D

Verrate auch gleich noch ein Geheimnis:
Wenn man vor die Funktion einen Kommentar der Form
; [returntype] = [param1type][param2type][param3type]
stellt, dann kann man den Output genauer definieren:
; void = nichts kommt zurück
; string = Pointer auf einen string / (auf ein Array von Zeichen), 0 Terminierung
; handle = Wenn es unwichtig ist, dass es ein Pointer ist (z. B. beim Objekt "Window")
; byte = signed 1 byte
; char = unsigned 1 bzw. 2 bytes (je nach dem, ob Unicode oder ascii)
; word = signed 2 Bytes
; long = signed 4 Bytes
; quad = signed 8 Bytes
; float = single precision float 4 Bytes
; double = double precision float 8 Bytes
; bool = 1-8 Bytes, darf nur 0 oder 1 sein (egal ob long, byte, quad, etc.)
;
; data = einfach Daten (beliebige Menge)
; struct Name = eine Struktur mit dem Namen 'name' (bis jetzt in PB nur in Verbindung mit 'ptr' erlaubt (byref)): [ptr struct POINT]
;
; ptr Type = eine Adresse, die auf einen Speicher mit dem Typ 'type' verweist (Bsp.: [ptr word][ptr long])
z. B.
; [void]=[long][ptr long]
; [ptr long] = [string][char]
das geht deshalb, weil man das in PB nicht immer genau so genau definieren
kann :wink:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

remi_meier hat geschrieben:Ich möchte sowieso so viele Sprachen wie möglich unterstützen. Also wenn
du mir eine genaue Beschreibung aller Datentypen (+Pointer) geben
könntest, sowie diese Beschreibung der Profan-Header etwas genauer :D
Ist nicht viel <)

Code: Alles auswählen

Text$ = string
Zahl& = long
Fließkommazahl! = double
Bereich# = pointer (memoryvariable)
PB Beispiel: (PureBasic.dll)

Code: Alles auswählen

ProcedureDLL Test(a.l, b.s, c.f)
  ProcedureReturn a
EndProcedure
Ergibt:

Code: Alles auswählen

Test(= External("PureBasic.dll", "Test",; ' a&, b$, c!, Ergebnis long
Wobei die Parameter sowieso nur als Kommentar angegeben werden, also
für die Header-Datei nur informativen Wert haben.
Es gibt auch noch inc-Dateien in Profan, da wäre es etwas komplizierter,
aber Header in dieser Form sollten erstmal reichen.

Der Profancompiler findet "~Test" und ersetzt durch den Text bis zum ";"
dahinter kommen dann vom Progger die weiteren Parameter, sowie die fehlende Klammer :wink:
Ist also wirklich nicht mehr erforderlich. Ich denke die Header-Dateien
sollten am unkompliziertesten sein.

Gruß
Thomas

// Nachtrag:
Bei Funktionen ohne Parameter, ist das komma vorm ; wegzulassen, das
komma sagt, da kommt noch was :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok, ist dann ja ähnlich wie BlitzBasic.
Nur, gibt es da einen essenziellen Unterschied zwischen # und & ? Muss
wissen, wann ich da unterscheiden sollte, aber da das ja eh nur Makro-
mässig abläuft, spielt es keine Rolle.
Kann ich dem Rückgabewert keinen Typ geben?

Werd das mal versuchen. Wenn du noch einen guten Link für inc-Dateien
hast, würde ich mir das auch gerne mal anschauen!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Guck mal auf Andreas seine Seite: http://www.ampsoft.eu/tools/codes.php
Bei den Tools brauchste DLL nur draufdroppen und er generiert. Dann siehste
wie es aussieht. Die inc haben den Vorteil, das die Anzahl der Parameter
ersichtlich ist. Diese Form des Def wird aber irgendwann nicht mehr
Unterstützt.

Ergebnise sind immer Long, müssen umgemünzt werden. Strings dürfen
direkt in Literalen übergeben werden, ansonsten mit der Addr Funktion,
entspricht @ in PB. Deswegen reichen einfach Kommentare für die
Parameter. Den Rest muß der Profaner selber hinkriegen :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok, nun noch drei Sachen zum sicher gehen:
Kommentare beginnen mit ;?
Es sind wirklich doubles und keine floats?
Ich hoffe, es ist stdcall :)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kommentare beginne mit hochkomma ' wie in VB u.a.
Das Semikolon ist das Ende für den Kompiler. Hochkomma dahinter und kommentare schreiben

Profan kennt nur Double. Kleinere Fließkommazahlen gibts nicht. Dafür gibts
leider keine Quad.

Profan kann nur stdcall DLLs lesen, bei den anderen spreizt er die Flügel :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten