سؤال

أحتاج إلى إجراء بعض عمليات الحقن باستخدام C++ ولكني أفضل استخدام C# لكل شيء بخلاف الأشياء ذات المستوى المنخفض.لقد سمعت عن "التفاف الوظائف" و"التنظيم" وأجريت قدرًا كبيرًا من البحث على Google ووجدت أجزاء من المعلومات هنا وهناك ولكن ما زلت أفتقر إليها حقًا.

الأشياء التي قرأتها مرتبة من حيث الفائدة؛
http://msdn.microsoft.com/en-us/library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/08/calling-c-lib-from-c.html

كيف يمكنني تغليف جميع العناصر ذات المستوى الأدنى (لغة C++ الأصلية) في لغة C# حتى أتمكن بسهولة من قيادة هذه الوظائف بلغة أشعر براحة أكبر معها، لغة C#؟

أي معلومات حول هذا الموضوع هو موضع تقدير كبير.

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

المحلول

أعتقد أن P/Invocation هو النهج الأكثر وضوحًا حقًا:

  • قم بإنشاء ملف DLL في غير مُدار C++، يحتوي على كافة الوظائف التي تحتاجها للقيام بالحقن.
  • في كود C# الخاص بك، قم بتعريف بعض static extern الأساليب، واستخدام DllImport السمة لتوجيههم إلى C++ dll الخاص بك.لمزيد من التفاصيل، راجع الرابط الذي قدمه ارول في إجابته.

لاحظ أن P/Invocation لا يقتصر على "وظائف Windows API" - يمكنك استدعاء الوظائف المكشوفة بواسطة أي مكتبة الارتباط الحيوي (DLL) الأصلية.

الجانب السلبي المحتمل لـ P/Invoc هو أنه سيتعين عليك توفير التوقيعات لوظائف C++ الخاصة بك، وربما تحديد بعض التنظيمات الأقل وضوحًا.في هذه الحالة، يمكنك التفكير في إنشاء خادم COM بدلاً من ملف DLL "عادي"، واستخدامه التشغيل المتداخل COM للاتصال بالرمز الخاص بك من C#.

نصائح أخرى

وتحتاج إلى استخدام P / استدعاء، انظر MSDN مجلة .

إذا Pinvoking ليس ما تريد القيام به، ثم إنشاء تطبيق تتم إدارته C ++. استخدام الأصلي C ++ للقيام بهذه الاشياء حقن العملية. استخدام ج تمكن ++ لإنشاء واجهة ودية .NET لهذا السلوك الأصلي. ويمكن بعد ذلك أن يسمى هذا من C #.

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