تحتاج إلى "اختتام" SDK المستند إلى C++ dll/h/lib/xml/exe في COM لاستخدامه في مشروع C# 2.0

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

  •  03-07-2019
  •  | 
  •  

سؤال

لقد حصلت للتو على حزمة SDK مكونة من C++ dll وlib وexe وملفات .h المتنوعة.أفترض أنه مخصص لمطوري C++.نماذج المشاريع التي يقدمونها مع وثائقهم كلها مكتوبة بلغة C++.أنا قادر على تشغيلها باستخدام Visual Studio 8 (2005) وتشغيلها.إنهم يتحكمون في الجهاز كما هو معلن.ومع ذلك، فإن المشروع الذي يجب استخدامه من خلاله موجود في C# .Net 2.0 وهذا غير قابل للتغيير.

كان مديري أحد مطوري C++ ويقول إن كل ما علي فعله هو تجميعه ككائن COM ثم استيراد كائن COM إلى حل C# الخاص بي.يقول مديري إن الأمر يجب أن يستغرق أقل من ساعة "لإنتهاء" SDK هناك ككائن COM، حتى بالنسبة لي بدون معرفة بتجميع C++.

لقد استخدمت كائنات COM في حلول C# من قبل، وبمجرد الانتهاء من ذلك، يمكنني الاستمرار من هناك دون مشكلة.

ومع ذلك، لا أعرف ما يجب فعله لإنشاء كائن COM من ملفي .dll، و1 .exe، وملف .lib واحد، وملف .xml 1، وملفات .h 12.هل هناك مورد متاح ليخبرني بما يجب فعله لتحقيق ذلك؟

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

المحلول

كان مديري أحد مطوري C++ ويقول إن كل ما علي فعله هو تجميعه ككائن COM ثم استيراد كائن COM إلى حل C# الخاص بي.

هذا صحيح، لكن يعد تجميعه ككائن COM أمرًا "صعبًا" (وهذا يعني أنه لا يمكنك القيام بذلك) إلا إذا قام بالفعل بتنفيذ واجهات برمجة تطبيقات COM (إذا لم يكن الأمر كذلك، فستحتاج إلى تنفيذ واجهات برمجة تطبيقات COM قبل أن تتمكن من إنشائه ككائن COM).

هناك كتب (على سبيل المثال، كوم الأساسية) والتي تشرح كيفية إنشاء كائنات COM باستخدام C++، ولكنها ليست تافهة (لإنشاء كائنات COM قد يكون هناك كتب أفضل من كوم الأساسية, وأدوات أفضل/أسهل من C++).

أعتقد أن لديك و/أو رئيسك في العمل ثلاثة خيارات:

  1. اطلب من البائع أن يقدمها لك ككائنات COM
  2. قم بتصميم واجهة برمجة تطبيقات COM التي من شأنها أن تغلف واجهة برمجة تطبيقات SDK.قم بإنشاء مشروع COM (باللغة التي تختارها) والذي يقوم بتصدير واجهة برمجة التطبيقات هذه.قم بتنفيذ واجهات برمجة التطبيقات هذه عن طريق استدعاء أساليب SDK الأساسية.للقيام بذلك، قد تحتاج إلى شخص يعرف C++، أو يكون على استعداد لإنفاق أكثر من "ساعة" على هذا المشروع.
  3. نسيان استخدام COM؛بدلاً من ذلك، أنشئ SDK كملف DLL، واستخدم PInvoc لاستدعائه من التعليمات البرمجية .NET.

يقول مديري إن الأمر يجب أن يستغرق أقل من ساعة "لإنتهاء" SDK هناك ككائن COM، حتى بالنسبة لي بدون معرفة بتجميع C++.

بناءً على ما قلته، لا أعرف أي طريقة لتحقيق ذلك.

نصائح أخرى

وأخبر رئيسك في العمل إذا كان سيستغرق منه أقل من ساعة لاتمامه، يجب ان يفعل ذلك بالتأكيد: سيكون استخدام أكثر كفاءة من كل من وقتك

وأود أن أقترح أيضا ATL (لا تستخدم سمات)، ولكن هذا هو الأمر الذي يمكن أن يستغرق بعض الوقت للحصول على حق إذا كنت لا من ذوي الخبرة.

<اقتباس فقرة>   

ومدرب بلدي تقول انها ينبغي أن تأخذ أقل من   ساعة ل"التفاف" هناك حزمة SDK على خط النار في   كائن COM، حتى بالنسبة لي مع أي   معرفة C ++ تجميع.

وهذا قد يكون صحيحا لمطور C ++ / COM من ذوي الخبرة، ولكن ليس للمبتدئين. أعتقد أن أفضل رهان هو استخدام ATL. نلقي نظرة على MSDN تعليمي .

و<م> لا سمات الاستخدام.

وهذا لا يجيب على سؤالك تماما، ولكن ...

وخيار واحد بدلا من محاولة جعل كائن COM هو استخدام P / استدعاء ومجرد استدعاء الأساليب في DLL.

هذا الموضوع على وثائق منتديات MSDN كيفية جعل DLL للاتصال باستخدام P / استدعاء.

وبالطبع إذا كنت بحاجة إلى الوصول إلى فئة كاملة (وجعل مثيل كائن قال)، وهذا لن يكون مفيدا.

وإنه لأمر جيد أن رمز بتصنيف ويعمل لك. وقال انها غير عادلة تماما لنفترض أنك تستطيع أن تفعل ذلك في ساعة واحدة.

هل راجعت لمعرفة ما هو في الواقع يجري بناؤها بواسطة Visual Studio. يمكن أن يكون هناك فرصة أن الذي تبنيه بالفعل كائن COM.

والتحقيق في الكيفية التي يتم بها استدعاء التعليمات البرمجية. وأفترض أن يكون لديك إكس التي يمكن تشغيلها لاختبار التعليمات البرمجية. من خلال هذه الخطوة في VC ++ المصحح (انها تشبه ما يكفي لتصحيح C # رمز) ومحاولة تحديد أي API يدعو تلك المباراة مع مستنداتك / التوقعات. هذه المعرفة سوف تكون مفيدة إذا حاولت أن يذهب P / استدعاء الطريق.

وشيء آخر هو أن تنظر إكرع . وعادة ما تستخدم هذه من قبل المطورين بيثون التفاف C / C ++ كود ويقدم بعض الدعم للC #.

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

وأنا (حسنا، حقا بلدي الرصاص وI) ستحاول أولا باستخدام ف / استدعاء (عبر ميزة DllImport من System.Runtime.InteropServices) ضد دلل على SDK في الشركة المقدمة. سوف نعلمك كيف ستسير الامور.

وأعتقد أن ما كنت تريد حقا / الحاجة C ++ / CLI، وبهذه الطريقة يمكنك بناء منهم فقط مباشرة إلى تجميع مدارة. والفكرة هي أن تكتب المجمع عادي جدا التي تبدو وكأنها نوع من عبور بين C # و C ++ وبعد ذلك بالباقي.

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