سؤال

مع واجهة COM طريقة أعلن هذا:

[ object,
  uuid(....),
]
interface IFoo : IUnknown 
{
  HRESULT Foo([in, out] CACLSID * items);
}

فيما يخص التنظيم ، هو خادم يسمح تخصيص حساب المصفوفة ؟ (أنا أعتقد هو, ولكن أنا لست متأكدا بعد الآن)

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

[عدل] يرجى ملاحظة أن CACLSID بالفعل مجموعة تتضمن عدد مؤشر.

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

المحلول

أنا لم تفعل COM لفترة طويلة جدا ولكن هل من الممكن أن تخصص مجموعة جديدة?في هذه الحالة يجب أن لا يكون CACLSID ** items ?

نصائح أخرى

يجب أن تعطي العد كمعلمة الثاني مما يدل على مساحة للعديد من عدد من العناصر ، باستخدام هذه COM مكتبة حراس العناصر

أولا, إذا كنت تريد Foo قبول في مجموعة ، يجب إضافة paramter أن يعطي العد ، على سبيل المثال:

HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);

تحذير:هذا القانون لم يتم تجميعها فقط الخروج الوثائق.

ثانيا ، لا يمكنك تعديل extern سلوك هذه الطريقة دون تغيير الإعلان.دعم تغيير حجم, عليك أن تكون قادرا على تخصيص مجموعة تمرير مرة أخرى عنوانه.يمكنك استخدام SAFEARRAY أو يعلن cItems و items مؤشرات النوع الأصلي Foo يأخذ ، على سبيل المثال:

HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);

مرة أخرى, لا جمع ، لذلك سيكون لديك فعلا أن أعرف ماذا كنت تفعل إذا كنت تستخدم هذا.

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