سؤال

أحتاج إلى تجميع بعض قواعد الألغام باستخدام برنامج التحويل البرمجي في دول مجلس التعاون الخليجي المضمن في أدوات R (R الإحصائي للبرنامج لنظام التشغيل Windows)، فإن المشكلة هي أنني بحاجة إلى استخدام IDispatch في التعليمات البرمجية لإنشاء وصول إلى طرق كائن COM، و لا يدعم مترجم GCC الكثير من الكود الذي أستخدمه للقيام بذلك، وهو رمز C ++ أساسا.

لذلك سؤالي هو كيف يمكنني استخدام IDispatch في C لإنشاء كائن COM دون الحاجة إلى الاعتماد على MFC أو .NET أو C # أو WTL أو ATL. أعتقد أنه إذا قمت بذلك، فسوف أكون قادرا على تجميع التعليمات البرمجية دون أي مشكلة.

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

المحلول

هناك مقال عظيم حول CodeProject بعنوان "COM في عادي C".

هنا الرابط إلى الجزء 1.

هناك الكثير من المعلومات الجيدة للغاية حول العمل مع COM في C في هذه المقالة والمتابعات التالية للمؤلف (أعتقد أن هناك 3 أو 4 في السلسلة).

يحرر:
كنت مخطئا، هناك 8 أجزاء!

الجزء 2
الجزء 3.
الجزء 4.
الجزء 5.
الجزء 6.
الجزء 7.
الجزء 8.

نصائح أخرى

بشكل عام، تعد واجهة IDispatch C ++ مجرد جدول مؤشرات الوظائف. في ج، فإنه سيبدو شيئا مثل:

typedef struct {
  HRESULT(*pQueryInterface)(void* this, REFIID riid, void **ppvObject);
  ULONG(*pAddRef)(void* this);
  ULONG(*pRelease)(void* this);
  HRESULT(*pGetTypeInfoCount)(void* this, unsigned int* pctInfo);
  HRESULT(*pGetTypeInfo)(void* this, unsigned int iTInfo,LCID lcid, ITypeInfo** ppTInfo);
  HRESULT(*pGetIDsOfNames)(void* this, REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
 HRESULT(*pInvoke)(void* this, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
} IDispatch_in_C;

لاحظ أن كل طريقة لها هذا المؤشر كمعلمة الأولى، وستحتاج إلى تحديد المزيد من الأنواع، مثل ItyPeInfo، Refiid، Despid، إلخ، إلخ.

لذلك، لها مهمة كبيرة. ولكن من الممكن إنشاء واجهات C ++ في نقية C.

كما يمكنك استخدام الطين مكتبة.

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