سؤال

عندما نقوم بتجميع ملف dll باستخدام __stdcall داخل visual studio 2008، فإن أسماء الوظائف المترجمة داخل ملف dll هي.

اسم وظيفة

على الرغم من أننا عندما نقوم بتجميع نفس ملف dll باستخدام مجلس التعاون الخليجي باستخدام wx-dev-cpp فإن مجلس التعاون الخليجي يُلحق عدد المعلمات التي تحتوي عليها الوظيفة، لذلك يبدو اسم الوظيفة باستخدام Dependency walker.

FunctionName@numberOfParameters أو == FunctionName@8

كيف يمكنك إخبار مترجم دول مجلس التعاون الخليجي بإزالة @nn من الرموز المصدرة في ملف dll؟

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

المحلول

يقوم __stdcall بتزيين اسم الوظيفة عن طريق إضافة شرطة سفلية إلى البداية، وعدد بايتات المعلمات حتى النهاية (مفصولة بـ @).

لذلك، وظيفة:

void __stdcall Foo(int a, int b);

...سوف يصبح _Foo@8.

إذا قمت بإدراج اسم الوظيفة (غير مزخرف) في قسم EXPORTS في ملف .DEF، فسيتم تصديره غير مزخرف.

ربما هذا هو الفرق؟

نصائح أخرى

مجرد استخدام -Wl,--kill-at على سطر الأوامر دول مجلس التعاون الخليجي، والتي سوف تمر --kill-at إلى الرابط.

مراجع:

تستطيع ايضا استخذام -Wl,--add-stdcall-alias إلى خيارات الرابط الخاص بك في دول مجلس التعاون الخليجي.سيضمن هذا وجود أسماء الوظائف (المزخرفة وغير المزخرفة) ويمكن استخدامها كاسم مستعار.

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