Question

Dans Narwhal, nous utilisons la JNA pour faire des appels libc comme getcwd et chdir. Je n'ai pu utiliser avec ma connaissance limitée de l'interface JNA en ce qui concerne JavaScript dans Rhino, traitant exclusivement des primitives. Je dois savoir comment allouer un char buffer afin que je puisse le transmettre à getcwd, récupérer une chaîne JavaScript à partir de ce tampon, et libérer le buffer, probablement dans une clause finally.

Voici comment nous saisissons l'interface libc:

http: / /github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L32-42

Voici comment chdir est mis en œuvre:

http: / /github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L438-444

est ici où nous avons besoin de la solution pour getcwd

http: / /github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L416-419

Solutions en Ruby ou tout autre langage intégré pour la JNA serait utile.

Était-ce utile?

La solution

vous pouvez utiliser un nio.Buffer ou jna.Pointer pour passer un tampon de sortie, quelque chose comme:

invokeString(new jna.Memory(4097), 4097)

getcwd renvoie un char * à la mémoire tampon d'entrée, de sorte jna volonté Marshall le retour à une chaîne

pour soutenir des chemins plus longs, vous pouvez prendre une longueur en option

en java, new File ( ""). GetAbsolutePath () peut obtenir le chemin en cours, de sorte que vous ne pourriez pas besoin getcwd ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top