سؤال

في Narwhal ، نستخدم JNA لصنعها libc مكالمات مثل getcwd و chdir. لقد تمكنت فقط من استخدام هذا مع معرفتي المحدودة لواجهة JNA لأنها تتعلق بـ JavaScript في وحيد القرن ، والتعامل حصريًا مع البدائية. أحتاج إلى معرفة كيفية تخصيص مخزن مؤقت لـ Char حتى أتمكن من تمريره إليه getcwd, ، استرجع سلسلة JavaScript من هذا المخزن المؤقت ، وقم بتخصيص المخزن المؤقت ، على الأرجح في أ finally بند.

إليكم كيف نلتقط libc واجهه المستخدم:

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

إليك الطريقة chdir تم تنفيذه:

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

هنا حيث نحتاج إلى الحل getcwd

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

من شأن الحلول في روبي أو أي لغة أخرى مضمنة لـ JNA أن تساعد.

هل كانت مفيدة؟

المحلول

يمكنك استخدام nio.buffer أو jna.pointer لتمرير مخزن مؤقت للإخراج ، شيء مثل:

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

ستعيد getCWD char* إلى المخزن المؤقت للإدخال ، لذلك سوف تقوم JNA بمقدمة العودة إلى سلسلة

لدعم مسارات أطول ، يمكنك أن تأخذ طولًا اختياريًا

في Java ، ملف جديد ("."). يمكن لـ GetabsolutePath () الحصول على المسار الحالي ، لذلك قد لا تحتاج إلى getCWD ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top