استخدام طراز كائن المكون (COM) على الأنظمة الأساسية غير التابعة لشركة Microsoft

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

  •  01-07-2019
  •  | 
  •  

سؤال

أواجه بانتظام مواقف مماثلة:لدي مجموعة من ملفات COM .DLL (لا توجد ملفات IDL) والتي أحتاج إلى استخدامها واستدعاءها حتى أتمكن من الوصول إلى بعض تنسيقات البيانات الأجنبية (غير المفتوحة وغير الموثقة).

يتمتع النظام الأساسي لـ Visual Studio من Microsoft بإمكانيات رائعة جدًا لاستيراد ملفات COM DLL هذه واستخدامها في مشروعي (توجيه #import الخاص بـ Visual C++، أو انتقاءها وإضافتها باستخدام مربعات حوار Visual Basic .NET) - وهذه هي الطريقة الموصى بها من قبل البائعين لاستخدامها.

سأكون مهتمًا بإيجاد طريقة لاستخدام مكتبات الارتباط الحيوي (DLL) هذه على منصات التطوير غير التابعة لشركة Microsoft.على وجه التحديد، استخدام فئات COM هذه في مشروع C++ المترجم مع MinGW أو Cygwin، أو حتى منفذ Wine's GB إلى Linux (يجمع C++ الذي يستهدف Win32 إلى ثنائي يعمل أصلاً على Linux).

لقد حصلت على بعض النجاح المحدود باستخدام هذا برنامج التشغيل، ولكن هذا لا ينجح في 100% من المواقف (لا يمكنني استخدام كائنات COM التي يتم إرجاعها بواسطة بعض الطرق).

هل نجح شخص ما في مواقف مماثلة؟

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

المحلول

أجيب على نفسي ولكني تمكنت من العثور على ممتاز مكتبة لاستدعاء OLE/COM في برامج التحويل البرمجي غير التابعة لشركة Microsoft: dishelper.

(إنه متاح من sourceforge.net بموجب ترخيص BSD المسموح به).

إنه يعمل في كل من C وC++ (وبالتالي أي لغة أخرى تحتوي على روابط C أيضًا).ويستخدم printf/scanf مثل تنسيق جملة السلسلة.
(يمكنك تمرير ما تريد طالما قمت بتحديده في سلسلة التنسيق، على عكس XYDispDriver والذي يتطلب أن تتطابق الوسائط تمامًا مع ما هو محدد في مكتبة النوع).

لقد قمت بتعديله قليلاً حتى يتم تجميعه أيضًا ضمن Linux باستخدام WineGCC (لإنتاج قزم Linux أصلي من كود Win32)، وللتعامل مع المكالمات "حسب المرجع" تلقائيًا (يتطلب Disthelper من المبرمج إعداد متغيره الخاص) .

تتوفر النسخة المصححة والتصحيحات الخاصة بي على شكل شوكة على جيثب:

وها هي بقعتي:

نصائح أخرى

المشكلة في Ole/Com Object Viewer المضمن مع Visual Studio وWindows SDK هي أنه ينتج ملف .IDL مقطوعًا من ملف .DLL، والذي لا يمكن تجميعه بواسطة MIDL إلى زوج .H/.CPP.

إن إعادة تطبيق OleViewer الخاصة بـ Wine غير مستقرة حاليًا وتتعطل عند محاولة استخدام تلك المكتبات.

أعتقد أنك يجب أن تكون قادرًا على استخدام الأداة المجانية Ole/Com Object Viewer لإنشاء ملفات الرأس.

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