سؤال

وأنا خلق كائن COM باستخدام Visual Studio 2008 و ATL. إضافة خصائص وأساليب بسيطة وسهلة بما فيه الكفاية ولكن الآن أريد أن أفعل شيئا أكثر تعقيدا. أريد أن أعطي الوصول إلى الكائن C ++ عبر خاصية كائن COM بلدي، لذلك أستطيع أن أفعل شيئا مثل:

// Pseudo-code
var obj = CreateObject("progid");
obj.aProperty.anotherProperty = someValue;

وهكذا، aProperty بإرجاع مرجع إلى كائن آخر الذي يعرض خاصية تسمى anotherProperty.

وأنا التخمين أنني بحاجة إلى إضافة كائن ATL بسيط آخر لمشروعي لكائن الثاني (الذي يطلق عليه IClass2)، والحصول على شيء كما يلي في المختبر الدولي للألماس:

[propget, id(1)] HRESULT aProperty([out, retval] IClass2** ppValue);

هل أنا على الطريق الصحيح هنا؟ لا أحد يعرف من تعليمي جيد لهذا النوع من الشيء؟

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

المحلول 2

ولقد عدت للتو عبر هذا المقال:

HOWTO: تنفيذ الهرمية وجوه ثابتة في ATL

وهذه تبدو مشابهة جدا لما أحاول تحقيقه.

نصائح أخرى

إذا كنت تريد الذهاب ليطلق عليه من لغة الأتمتة، ستحتاج عادت واجهة التي يمكن جنيها من IDispatch و، وسوف المرجح أن تحتاج إلى إعادته على الأقل باعتبارها IDispatch و**. لretval أعتقد أن هذا أمر جيد بما فيه الكفاية. لبسيطة [من] المعلمات تحتاج إلى تمرير أنها VARIANT * (مع نوع المتغير المقرر أن VT_LPDISPATCH) بحيث اللغة الأتمتة يمكن فهمه.

ولست متأكدا إذا كان هناك تعليمي جيد. انها كانت منذ بعض الوقت بحثت عن مرجع شامل. أفضل نصيحة يمكن أن أعطي سيكون للتأكد من كل شيء كنت تمر هي أتمتة متوافق (على سبيل المثال: هو النوع الذي يمكنك وضع في VARIANT)، والتي يجب أن تأخذ الرعاية من 80٪ من مشاكلك. انها قابلة للتنفيذ للغاية، على الرغم؛ فقط تقرأ على MSDN، ويجب أن يكون على ما يرام.

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