قد COM server تخصيص ([ ، ] CACLSID * arg)?
-
03-07-2019 - |
سؤال
مع واجهة 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);
مرة أخرى, لا جمع ، لذلك سيكون لديك فعلا أن أعرف ماذا كنت تفعل إذا كنت تستخدم هذا.