كيف يمكنني الوصول إلى char ** من خلال ffi في مخطط plt؟

StackOverflow https://stackoverflow.com/questions/105816

  •  01-07-2019
  •  | 
  •  

سؤال

أنا أسخر من ffi الخاص بـ plt-scheme ولدي وظيفة C تقوم بإرجاع char ** (مجموعة من السلاسل).إذا أعلنت وظيفتي كـ (_fun _pointer -> _pointer), كيف يمكنني تحويل النتيجة إلى قائمة السلاسل في المخطط؟

فيما يلي إعلانات C ذات الصلة:

typedef char **MYSQL_ROW;   /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
هل كانت مفيدة؟

المحلول

أنا يفكر أن ما تريده هو cvector:

http://docs.plt-scheme.org/foreign/Derived_Utilities.html#(part._foreign~3acvector)

يبدو أن ناقل _string/utf-8 أو أي ترميز تحتاجه معقول.

ولكن هذا من خلال مسح سريع للمستندات - لم أجرب ذلك بنفسي.أرجوك أخبرني إن كانت تشتغل!

نصائح أخرى

أعلم أن هذا ليس ما تبحث عنه بالضبط، لكنه قد يساعدك قليلاً.لقد قمت ببعض الأعمال على برنامج Gambit Scheme FFI الأساسي لـ MySQL.لا أعرف كيف يختلف مخطط PLT و Gambit من حيث تنفيذ FFI (سأغامر بـ "القليل جدًا") ولكن ربما يمكنك الحصول على شيء منه:

http://bunny.jonnay.net/zengarden/trunk/lib/mysql/mysql-ffi.scm

اها، لقد اكتشفت ذلك بنفسي.

لا بد لي من استخدام _cpointer الإجراء الموضح في الصفحة التي ربطها مايك بـ:

(_fun _pointer -> (_cpointer/null 'mysql-row (make-ctype _pointer #f #f)))

ويبدو ذلك أيضًا شخص ما ضربني بالفعل لإنشاء ffi إلى mysqlclient.لا تقلق؛هدفي الرئيسي هو فهم واجهة برمجة تطبيقات ffi، وهي تمضي قدمًا.

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