سؤال

أولا، وأنا أعلم أنه لا معنى له بمقارنة سمة Dllimport ووظيفة GetProcaddress مباشرة. بدلا من ذلك، أنا مهتم بمقارنة قطعتين من التعليمات البرمجية، والتي تحقق أساسا نفس الشيء - استدعاء وظيفة في DLL - إما استيراد الوظيفة بسمة Dllimport أو مع وظيفة GetProcaddress. على وجه التحديد، أكتب تطبيق C # يستخدم بعض الوظائف في DLL التي كتبتها. في البداية، وصلت إلى دالة DLL الخاصة بي مع القطعة التالية من التعليمات البرمجية:

giveacodicetagpre.

ومع ذلك، كنت بحاجة لاحقا للحصول على قيمة LasterArror، إذا تم تعيينها أثناء مكالمة DLL، لذلك غيرت التعليمات البرمجية في هذا:

giveacodicetagpre.

هذا بالطبع من المدعي، وكما هو مذكور، فإنه يحدد رمز LasterArror. من الواضح أن أول قطعة من التعليمات البرمجية تعطيني إمكانية تغيير DLL ووظيفة الدالة عند وقت التشغيل، ولكن في الوقت الحالي غير مطلوب. لذا فإن سؤالي هو: هل هناك أي أسباب لاستخدام الصياغة الأولى، إذا كنت متأكدا، فلن أستخدم DLL آخر أو وظيفة أخرى؟

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

المحلول

المزايا الحقيقية الحقيقية فقط لاستخدام GetProcaddress هي أنه يمكنك إلغاء تحميل DLL يدويا وكذلك استدعاء وظيفة، ويمكنك تغيير التسمية بسهولة في وقت التشغيل.

ومع ذلك، فإن الخيار الثاني يوفر لك عددا كبيرا من الفوائد.بالإضافة إلى كونها "مدها"، فإنه يتعامل أيضا كثيرا من قدرات أنواع البيانات لك - والتي تصبح مهمة للغاية مع بعض أبيس.

التي يقال، إذا قمت بذلك الطريقة التي أدخلتها كأول مرة، يجب عليك التأكد من تفريغ كل شيء أيضا.الآن، أنت تسريب العناوين في كل مرة تقوم فيها في شريط () ... للحصول على التفاصيل، انظر إلى freelibrary .

نصائح أخرى

ربما تكون أكبر ميزة للأجيال هو أنه يتيح لك التحكم في مسار البحث في DLL.على سبيل المثال، يمكنك تحميل إصدار 32 بت أو 64 بت من DLL الأصلي تلقائيا.مع GetProcAddress، هذا غير ممكن.

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