سؤال

وهذا مرتبط سؤالي الآخر ، ولكن شعرت أنني يجب أن يطلب منها في سؤال جديد.

وأساسا يستخدم 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

ووالتظاهر التي تم تعريفها بالفعل، ولا تهتم لأنك تحتاج فقط مؤشر عليه، الذي هو في الأساس موقف في الذاكرة.

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