Dlls in verschiedenen Sprachen

04/24/2010 17:23 Shadow992#1
Ok ich bin mir nicht ganz sicher und wollte deshalb einfach mal nachfragen .

Also nehmen wir an ich habe eine DLL in C geschrieben und möchte diese in Java benutzen , geht das dann so ohne weiteres ?
Bsp :
Dll :
Code:
char * Fuction(const char * name)
{
//...
}
Kann ich das dann einfach so ohne etwas beachten zu müssen (abgesehen von dem Einbinden) in Java aufrufen ?
Würde es einfach funktionieren , wenn ich einen Java-String übergebe ?
Denn in Java sind Strings ja in einer Klasse angeordnet , ich könnte mir vorstellen , dass es zu Problemen kommen kann ...
Oder wie sieht es mit Delphi , Python usw. ?
Kann ich die Dlls einfach so in jeder Sprache benutzen ohne etwas beachten zu müssen ?

Hoffentlich könnt ihr mir diese Frage(n) beantworten .

Danke schonmal im vorraus ;)
04/24/2010 17:29 HardCore.1337#2
Anstatt Strings zu verwenden, nutzte lieber PChar.
Des weiteren müssen die DLL Datein mit einer Aufrufkonvention versehen werden.
Dabei gibt es etwa
  • stdcall (Favorite)
  • Pascal
  • cdecl
  • register
Diese geben lediglich an, wie die Dll gelesen wird (von vorne nach hinten oder anders rum)
04/24/2010 18:42 Akorn#3
Quote:
Originally Posted by General Desert View Post
  • stdcall (Favorite)
  • Pascal
  • cdecl
  • register
Diese geben lediglich an, wie die Dll gelesen wird (von vorne nach hinten oder anders rum)
Die Geben nicht an wie die dll gelesen wird sondern wo die Parameter von funktionen abgelegt werden und in welcher reihenfolge.
04/24/2010 18:56 HardCore.1337#4
Naja mit Reihenfolge mein ich ja wie sie abgearbeitet werden.
04/24/2010 20:14 MrSm!th#5
Nunja ein bisschen gibts schon zu beachten.
Du musst eben auf Callingconventions achten und bei Klassen darauf, dass sie der Dll bekannt sind.
Ich denke nicht, dass eine Funktion die char* annimmt auch mit string aus Java funktionieren wird...
Wie das genau ist, mit Dlls in Prozessen die auf VMs laufen, weiß ich nicht, meine nur mal gelesen zu haben, dass .NET Dlls nicht in normale Prozesse injected werden können; einbinden sollte aber schon gehen..
04/24/2010 20:45 HardCore.1337#6
Quote:
Ich denke nicht, dass eine Funktion die char* annimmt auch mit string aus Java funktionieren wird...
Ich arbeite nur so, da es bei String Variablen leicht zu Fehlern kommen kann.
Es ist kein Problem (ich habe noch keins mitbekommen) diese beiden typen zu mischen bzw. gemeinsam zu verwenden (eine Umwandlung ist ja schnell erledigt ;) ).
Allerdings habe ich hier keine Ahnung, wie das ganze mit .NET aussieht.

Mit den Klassen nochmal.
Du erstellst erstmal ganz normal deine Funktion und dann musst du sie exportieren. Wie der Befehl in C++ weiß ich nicht, aber ohne diese exportierung siehst du rein gar nix von der DLL