2010-11-30 6 views
2

Il y a une certaine bibliothèque que j'aimerais utiliser de Java.Comment écrire un wrapper Java JNI pour un ensemble de fonctions de bibliothèque Pascal?

La bibliothèque elle-même est écrit en Pascal et compilé en une DLL. J'ai lu l'accès à tous les codes source pertinents (c'est gratuit et open source) mais il est peu probable que je puisse influencer les propositions de changement au code original de la bibliothèque. J'ai très peu de connaissances ou d'expérience Pascal. La bibliothèque elle-même s'occupe dans une certaine mesure de transmettre et de récupérer des structures en mémoire. (S'il s'agissait de C, les fonctions prendraient et retourneraient des pointeurs de structure Je ne suis malheureusement pas au courant des noms équivalents dans Pascal.)

Ce que je voudrais faire est un wrapper Java à cette bibliothèque. Je voudrais pouvoir faire des appels à ces fonctions. J'ai lu un certain nombre de tutoriels sur l'interface Java native. Ce qui est logique, c'est comment interfacer ces fonctions. Ce qui n'a pas de sens pour moi, c'est comment je suis censé gérer ces structures en mémoire.

J'apprécierais vraiment si quelqu'un pourrait me aider à comprendre comment faire, ou me diriger vers une bonne ressource pour elle. Ce que j'ai lu jusqu'ici exclut ou glose la plupart du temps ce qui semble être la partie la plus importante pour ce dont j'ai besoin, traitant de ces structures que j'ai en mémoire.

Merci à tous.

+0

Une précision, je cherche à lire les données de cette structure, en plus de passer à nouveau dans d'autres appels de fonction. – Ming

+0

Quel compilateur pascal est utilisé pour générer la DLL? J'ai précédemment appelé une DLL compilée Delphi à partir de C et une DLL compilée C à partir de Delphi et c'est assez simple. Dans la plupart des cas, les enregistrements de Pascal sont à peu près les mêmes que ceux d'un C, aussi longtemps que vous choisissez le bon type pour que le nombre d'octets corresponde à chaque champ, vous devriez être OK. Les chaînes peuvent être beaucoup plus intéressant car il y a beaucoup de variétés là-bas ... –

+1

Je suggère donc d'écrire un code de test en C pour voir si vous pouvez appeler les fonctions DLL et de passer autour des structures. Une fois que c'est en cours, vous aurez les signatures C pour commencer à travailler sur les appels JNI. –

Répondre

1

Sur la base de mon expérience, il faut éviter JNI (trop compliqué) & l'utilisation de la JNA à la place.

+0

D'accord. http://en.wikipedia.org/wiki/Java_Native_Access –

Questions connexes