DLL mit exportierten Functions

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
HaglMi
Posts: 16
Joined: Mon Sep 28, 2015 7:58 am
Location: Germany

DLL mit exportierten Functions

Post 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
Mit freundlichen Grüßen

Michael Hagl
Bayern
Deutschland
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DLL mit exportierten Functions

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
HaglMi
Posts: 16
Joined: Mon Sep 28, 2015 7:58 am
Location: Germany

DLL mit exportierten Functions

Post 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
Mit freundlichen Grüßen

Michael Hagl
Bayern
Deutschland
HaglMi
Posts: 16
Joined: Mon Sep 28, 2015 7:58 am
Location: Germany

DLL mit exportierten Functions

Post 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
Mit freundlichen Grüßen

Michael Hagl
Bayern
Deutschland
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DLL mit exportierten Functions

Post by wriedmann »

Hallo Michael,
wie geschrieben, nutze ich ausschließlich COM dafür.
Was anderes müsste ich erst probieren zu implementieren.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
HaglMi
Posts: 16
Joined: Mon Sep 28, 2015 7:58 am
Location: Germany

DLL mit exportierten Functions

Post 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
Mit freundlichen Grüßen

Michael Hagl
Bayern
Deutschland
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DLL mit exportierten Functions

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
HaglMi
Posts: 16
Joined: Mon Sep 28, 2015 7:58 am
Location: Germany

DLL mit exportierten Functions

Post 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
Mit freundlichen Grüßen

Michael Hagl
Bayern
Deutschland
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DLL mit exportierten Functions

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply