ctypes الثعبان ومؤشرات الدالة
-
22-08-2019 - |
سؤال
وهذا مرتبط سؤالي الآخر ، ولكن شعرت أنني يجب أن يطلب منها في سؤال جديد.
وأساسا يستخدم FLAC مؤشرات الدالة على الاستدعاء، وتنفيذ عمليات الاسترجاعات مع ctypes، يمكنك استخدام CFUNCTYPE
إلى النموذج الأولي لهم، وبعد ذلك يمكنك استخدام الدالة prototype()
لخلق لهم.
والمشكلة لدي مع ذلك هو أنني أحسب أنني من شأنه أن يخلق وظيفة رد لي على هذا النحو (وأنا لا تظهر الهياكل بأنني صوغه، FLAC__Frame هو الهيكل):
write_callback_prototype = CFUNCTYPE(c_int, c_void_p,
POINTER(FLAC__Frame),
POINTER(c_int32), v_void_p)
والمشكلة التي لدي هي التنفيذ. لم يتم إنشاء مثيل FLAC__Frame من قبل مبرمج، انه دعا فقط من من وظيفة التهيئة، وfunctions.I المعالجة يجب أن كتابة دالة رد نفسي، لكنه المشكلة هي أنني لا أعرف كيف سأفعل هذا، لذلك إذا كان أي شخص يعرف كيف ينبغي القيام بذلك، ثم بعض المساعدة سيكون موضع تقدير كبير.
المحلول
ووفقا ل ctypes رد مستندات الذي يمكن أن تحدد وظيفة الثعبان
def my_callback(a, p, frame, p1, p2)
pass
ثم قم بإنشاء مؤشر دالة للاستدعاء C مثل هذا:
callback = write_callback_prototype(my_callback)
ويمكن بعد ذلك أن تمرير هذا مؤشر الدالة إلى FLAC
نصائح أخرى
والمشكلة التي لدي هي التنفيذ. لم يتم إنشاء مثيل FLAC__Frame من قبل مبرمج، انه دعا فقط من من وظيفة التهيئة، وfunctions.I المعالجة يجب أن كتابة دالة رد نفسي، لكنه المشكلة هي أنني لا أعرف كيف سأفعل هذا، لذلك إذا كان أي شخص يعرف كيف ينبغي القيام بذلك، ثم بعض المساعدة سيكون موضع تقدير كبير.
اقتباس فقرة>في هذه الحالة، ومجرد استخدام:
import ctypes
class FLAC__Frame(ctypes.Structure):
pass
ووالتظاهر التي تم تعريفها بالفعل، ولا تهتم لأنك تحتاج فقط مؤشر عليه، الذي هو في الأساس موقف في الذاكرة.