هل هي آمنة لتمرير مؤشرات الدالة كوسائط إلى DLL وظائف والاحتجاج عليها من داخل دلل؟

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

سؤال

وأود أن تمرير بعض (DLL أو لا) مؤشرات الدالة كوسائط لبعض الوظائف دلل، وندعو لهم من داخل DLL. وأتساءل عما إذا كان ذلك آمنا لأنني قد وجدت معلومات عن <لأ href = "http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp؟topic=/com.ibm.zos.r10 .cbcpx01 / fpref.htm "يختلط =" نوفولو noreferrer "> http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp؟topic=/com.ibm.zos.r10.cbcpx01/fpref . HTM ما يلي:

في كود DLL، فمن المفترض أن نقاط مؤشر دالة إلى واصف وظيفة. يتم إجراء استدعاء دالة مؤشر من الحصول أولا على عنوان وظيفة من خلال dereferencing المؤشر. وبعد ذلك، المتفرعة إلى إدخال الدالة. عندما يتم تمرير مؤشر دالة غير DLL-إلى رمز DLL، فإنه يشير مباشرة إلى إدخال الدالة. محاولة لdereference من خلال هذا المؤشر تنتج عنوان وظيفة غير معرف. المتفرعة لاحقا إلى عنوان غير معروف قد يؤدي إلى استثناء.

هل تنطبق هذه القاعدة إلى Visual Studio وغيرها من جامعي كذلك؟

وماذا بالضبط أحاول القيام به هو إيجاد حل لمشكلة تخصيص الذاكرة وإلغاء تخصيص بين مختلف دلل وظائف غير DLL. فكرتي هي لتمرير اثنين من مؤشرات الدالة - لوظائف تخصيص وإلغاء تخصيص المشتركة - لكل دلل في بعض التهيئة (مثل تهيئة (& malloc، ومجانا)) ومن ثم القيام بكل إدارة الذاكرة باستخدام هذه الوظائف متوافقة شيوعا، وبالتالي دائما

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

المحلول

وهذا ليس صحيحا. كود DLL يعامل مؤشرات الدالة في بنفس الطريقة تماما كما كود غير DLL. وإذا لم يكن الأمر كذلك، لا يمكن استخدام وظائف مكتبة القياسية مثل qsort () (والذي يتوقع حجة وظيفة المؤشر) ضمن DLL.

نصائح أخرى

واجتياز مؤشرات الدالة إلى DLL تم القيام به للأجيال.

وجميع وظائف رد الاتصال المستخدمة في برمجة واجهة المستخدم الرسومية (على سبيل المثال تقدم الحانات التحديث) استخدام مؤشرات الدالة.

عند تطوير باستخدام WIN32، هناك سبب كنت تريد استخدام مؤشرات الدالة على malloc / الحرة؟ لماذا لا ببساطة عن طريق استخدام malloc / الحرة مباشرة؟

وهذه هي الطريقة التي فعلت دائما في الماضي. لا أن هذا يضمن انها الطريقة الصحيحة.
في الواقع، كنت قد يستغرق ذلك كمؤشر انه بأسوأ طريقة ممكنة:)

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