سؤال

كلاهما:

  • CLSID
  • معرف الهوية

وبعد تحديد ما سبق، واستخدام:

  • CoCreateInstance()

لإرجاع كائن واحد غير مهيأ من الفئة المحددة بواسطة CLSID أعلاه.

كيف يمكنني بعد ذلك الوصول إلى طريقة الواجهة من C++؟بدون:

  • أتل
  • MFC
  • مجرد C++ عادي

بعد ذلك، أستخدم CreateInstance()

أواجه مشكلة في استخدام CreateInstance() - مع المعلمة الأخيرة - ppv

باستخدام oleview، يمكنني رؤية أساليب IIDabove IID المحددة أعلاه، مثل:

interface IS8Simulation : IDispatch {
    HRESULT Open([in] BSTR FileName);
};

كيف يمكنني بعد ذلك الوصول إلى ما سبق؟أمثلة/إرشادات - من فضلك

يعتبر

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

المحلول

من خلال القيام بـ CoCreateInstance، يمكنك الحصول على مؤشر واجهة.من خلال طريقة QueryInterface(...) يمكنك الحصول على مؤشر الواجهة لبعض الواجهات الأخرى بسهولة.على سبيل المثال،


IUnknown* pUnk = NULL;
HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);

IS8Simulation* pSim = NULL;hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);

بعد القيام بذلك، سوف تحصل على المؤشر إلى IS8Simulation في pSim ومن خلال ذلك يمكنك استدعاء أساليب تلك الواجهة.تذكر أنك بحاجة إلى توفير clsid صالح في استدعاء CoCreateInstance.

نصائح أخرى

إنها غامضة بعض الشيء ما هي المشكلة الفعلية.بعض التعليمات البرمجية ستكون مفيدة.ولكن للتخمين، هل تحتاج إلى QueryInterface؟

 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

سأحاول القيام بما سبق، ولكن تم الإعلان عن IS8Simulation - يرجى المعذرة لعدم وجودي كوم فهم

علاوة على ذلك، كيفية استدعاء الطريقة، أدناه باستخدام عادي C ++:

HRESULT Open([in] BSTR FileName)

ربما تريد #import "something.dll".سيعطيك هذا إعلانات C++ لأنواع مثل IS8Simulation، على غرار ما سيفعله #include "something.h".

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