xsharp.eu • DLL mit exportierten Functions
Page 1 of 1

DLL mit exportierten Functions

Posted: Wed Jul 14, 2021 9:03 am
by HaglMi
Hallo,

kann ich in x# eine 32-Bit-DLL mit exportierten Funktionen erzeugen, die ich zB. mit xHarbour per LoadDll / DllCall aufrufen kann?

Vielen Dank
mfg Michael Hagl

DLL mit exportierten Functions

Posted: Wed Jul 14, 2021 9:12 am
by wriedmann
Hallo Michael,
klar kannst Du das.
Wird hier beschrieben:
https://www.codeproject.com/Tips/695387 ... d-C-Cplusp
https://stackoverflow.com/questions/778 ... ode-from-c
Allerdings: Du kannst keine Xbase-Datentypen verwenden.
An und für sich sollte auch der Macrocompiler automatisch geladen werden.
Getestet habe ich das allerdings nicht. Da der X# Compiler denselben Code erzeugt wie der C# Compiler, sollten obige Anweisungen funktionieren.
Ich nutze in meinen VO-Applikationen ganz massiv X#-DLLs, aber mache das über die COM-Schnittstelle, weil ich da auch Objekte und Strings übergeben kann, die Umsetzung zwischen ANSI und UTF8 automatisch passiert und zusätzlich auch die Bitness kein Problem darstellt (die DLL kann auch 64 Bit oder AnyCPU sein).
Wolfgang

DLL mit exportierten Functions

Posted: Wed Jul 14, 2021 2:31 pm
by HaglMi
Hallo Wolfgang,

danke für die schnelle Antwort. Mein Junior hat die Aufgabe von mir bekommen, in c# eine DLL zu schreiben, die einige Sachen per DotNet erledigt und die ich aus xHb aufrufen kann. Das hat ihm schon weiter geholfen, aber er hat noch das Problem mit der Rückgabe von Daten.
Vielleicht kann ich ihn mal dazu überreden, sich mit x# zu befassen, zum Installieren habe ich ihn heute schon genötigt :)

mfg Michael

DLL mit exportierten Functions

Posted: Thu Jul 15, 2021 5:16 pm
by HaglMi
Hallo Wolfgang,
kannst Du ein bisschen Quellcode zeigen, wie Du das in x# machst, vor allem die Datenrückgabe über Pointer

Vielen Dank im Voraus
Michael

DLL mit exportierten Functions

Posted: Thu Jul 15, 2021 6:14 pm
by wriedmann
Hallo Michael,
wie geschrieben, nutze ich ausschließlich COM dafür.
Was anderes müsste ich erst probieren zu implementieren.
Wolfgang

DLL mit exportierten Functions

Posted: Thu Jul 15, 2021 6:24 pm
by HaglMi
Hallo Wolfgang,

das mit COM habe ich überlesen.
Mein Junior hat jetzt auch angefangen, das über COM zu lösen, da wir per DLLCall (würde mittlerweile funktionieren) mit der Rückgabe der Daten über einen Pointer ziemliche Probleme haben. Er hat nicht rausgefunden, wie der zurückgegebene Wert der per Referenz übergeben Variablen codiert ist. Das Ergebnis wird in der xHb-Anwendung als Datenmüll angezeigt.

Bemühe Dich nicht weiter!

Michael

DLL mit exportierten Functions

Posted: Thu Jul 15, 2021 6:30 pm
by wriedmann
Hallo Michael,
um Speicherbereiche über die C-Schnittstelle zu übergeben, müsste der aufrufende Prozess einen Pointer mit übergeben, samt der Angabe, welche Länge der entsprechend allokierte Speicherbereich hat.
Der aufgerufene Prozess müsste dann sein Ergebnis in den entsprechenden Speicherbereich kopieren, und der aufrufende Prozess diesen Speicher nach dem Auslesen wieder freigeben.
So läuft das z.B. im Windows API.
Unter COM brauchst Du Dich um alle diese Geschichten nicht zu kümmern. Mit VO geht das dann so:
https://docs.xsharp.it/doku.php?id=com_module_sample
Wolfgang

DLL mit exportierten Functions

Posted: Wed Jul 28, 2021 6:18 pm
by HaglMi
Hallo Wolfgang,
mein Junior hat es in c# hingekriegt, ich habe ihn dann sogar überreden können, dass er es nach x# portiert.
Ich verwende das Com-Objekt in xHarbour. Er ist jetzt gerade dabei, mir eine Reihe von Klassen zu implementieren, vor allem einen SMTP Email-Client mit Vorschau und eine SFTP-Klasse und noch ein paar so Kleinigkeiten, die in xHb schlecht gehen.

Vielen Dank für Deine Hilfe
Michael

DLL mit exportierten Functions

Posted: Wed Jul 28, 2021 7:06 pm
by wriedmann
Hallo Michael,
Du wirst lachen, aber ein SMTP-Client (mit SSL-Support) ist auch eine der COM-Libraries, die ich in den meisten VO-Programmen nutze.
Dann kommen noch welche dazu, die auf Webservices zugreifen, oder eine Excel-DLL, sowie diverse DLLs zum Zugriff auf PostgreSQL und SQLite.
Ohne die ganzen in X# geschriebenen COM-Libraries hätte ich die letzten Jahre ganz massive Probleme mit meinen VO-Programmen bekommen.
Wolfgang