Bonjour,
Mon problème est un peu particulier et je vais tenter d'être clair en l'exposant.
Je souhaite m'interfacer avec du code écrit en Java, dont les .jar ont été transformé en une DLL grâce à l'outil ikvm et une commande semblable à:
ikvmc -out:ToBeUsed.dll -recurse:SOME_PATH\*.jar
J'ai tenté la méthode dynamique indiquée si dessous, en utilisant la javadoc des .jar sources pour charger une fonction statique.http://www.google.com/url?q=http%3A%...FbWBxZm5HxthQQ
Cependant, la fonction
GetProcAddress(HandleDLL, pAnsiChar('MyFunction'));
ne renvoie pas une valeur correcte, donc le test échoue.
Maintenant quelques données vérifiées :
L'outil Tdump, par la commande tdump -ee -m ToBeUsed.dll ne me montre pas le contenu de la dll.
Au sein d'un environnement dotNet (visual studio), j'ai pu importer cette dll et l'utiliser pour afficher le toString d'un objet retourné par une fonction statique. Donc la dll est fonctionnelle.
Voici le code de la procédure Delphi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| procedure Test();
var
HandleDLL: THandle;
getFlowMind: function (): TObject;
begin
//Chargement de la DLL
HandleDLL := LoadLibrary(pWideChar('C:\Flowmind_Home\flowmind67All.dll'));
//Si la DLL n'est pas chargée on ne continue pas
If HandleDLL = 0 then Exit;
//Récupération de l'adresse de la fonction nommée 'Somme'
getFlowMind := GetProcAddress(HandleDLL, pAnsiChar('com.akazi.flowmind.api.access.FlowMindAccess.getFlowMind'));
//Appel de la fonction si on a bien récupéré son adresse
If Assigned(getFlowMind) then
ShowMessage(getFlowMind.ClassName)
Else
ShowMessage('Error');
end; |
J'en viens à ma question. Existe-t-il un outil permettant de faire cela ?
Je n'ai pas trouvé de méthode du langage qui le permette, et à vrai dire, beaucoup de sujets à ce propos commencent à se faire vieux.
Merci d'avance !
Partager