هل هناك طريقة لاستدعاء ملف dll غير مُدار (وليس COM) من تطبيق C#؟

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

سؤال

هل هناك طريقة لاستخدام (مرجع) ملف DLL مكتوب في C++ غير مُدار (وليس مكتبة COM) في تطبيق C# الخاص بي؟

عندما أحاول الرجوع إليه من داخل Visual Studio، أحصل على رسالة الخطأ "ليس كائن COM".

ربما هناك نوع من المترجم/جهاز التوجيه الذي من شأنه أن يلائم مرجع DLL الخاص بي؟ليس لدي أدنى فكرة عن كيفية عمل التشغيل المتداخل لـ COM وCOM، منذ أن بدأت البرمجة عندما كان هذا غير ضروري بالنسبة لي.

شكرًا لك.

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

المحلول

وتحتاج إلى استخدام السمة DllImport. وفيما يلي مثال لالدالة Win32 PostMessage:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);

نصائح أخرى

يرى "استهلاك وظائف DLL غير المُدارة"الموضوع على MSDN:

http://msdn.microsoft.com/en-us/library/26thfadc.aspx

ليست هناك حاجة لإضافة أي وكيل COM، حيث يمكن لـ .NET استهلاك ملفات DLL مباشرة باستخدام [استيراد دلل] يصف.لديك أيضًا التحكم الكامل في التنظيم بين .NET وDLL غير المُدار عن طريق تحديد سمات إضافية.

لقد أجاب جو بالفعل على هذا، لذا سأقوم بمعالجة هذا الأمر - لتوفير بعض الوقت وعدم الاضطرار إلى البحث عن توقيعات الوظائف وإفسادها، يحتوي P/Invoce على مكتبة كاملة جدًا من توقيعات Win32، في شكل كل من wiki ومكون إضافي لبرنامج Visual Studio!

التحقق من ذلك في ف/استدعاء

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