سؤال

ما هي أفضل طريقة لحيوي P / استدعاء التعليمات البرمجية غير المدارة من صافي؟

وعلى سبيل المثال، ولدي عدد غير المدارة في DLL مع الصادرات مشترك على غرار C بينهما. وأود أن تأخذ المسار إلى DLL ثم P / استدعاء وظيفة استنادا إلى اسم تصديرها. أنا لا أعرف اسم DLL حتى وقت التشغيل.

وأساسا، ما هو ما يعادل LoadLibrary وGetProcAddress ل. NET؟ (لقد كود الذي يستخدم هذه الوظائف لتحقيق نفس الهدف، تماما في التعليمات البرمجية غير المدارة القائمة).

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

المحلول

وتوضح هذه المقالة typesafe تمكن مجمع لGetProcAddress من شأنها أن تساعد على الخروج.

http://blogs.msdn.com/ jmstall / أرشيف / 2007/01/06 / Typesafe-GetProcAddress.aspx

نصائح أخرى

ويمكنك القيام بذلك عن طريق P / استدعاء إلى LoadLibrary و GetProcAddress، ثم استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getdelegateforfunctionpointer. ASPX "يختلط =" نوفولو noreferrer "> Marshal.GetDelegateForFunctionPointer .

لمزيد من التفاصيل، انظر هذه المقالة .

وانظر أيضا <لأ href = "http://blogs.msdn.com/jonathanswift/archive/2006/10/03/Dynamically-calling-an-unmanaged-dll-from-.NET-_2800_C_23002900_.aspx" يختلط = "نوفولو noreferrer"> هذا بلوق وظيفة من عنوان جوناثان سويفت تدعو حيوي ودلل غير المدارة من صافي

وخيار واحد لديك هو خلق وظيفة الأم التي هي المسؤولة عن تحميل DLL وظيفة مناسبة في الذاكرة ثم تعود تلك الوظيفة إلى التعليمات البرمجية المدارة على أساس المسار. وبهذه الطريقة يمكنك استخدام خدعة GetProcAddress بشكل طبيعي ويرجع نقطة وظيفة. يمكنك ثم PInvoke في هذه الوظيفة ونعود مندوب التي سوف ثم استدعاء في DLL الصحيح.

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