سؤال

حسنا, لذلك أنا لا أعتقد حقا من بالمناسبه العنوان الذي يلخص هذا.

على IPrintPipelinePropertyBag واجهة طريقة AddProperty التي باقتدار بما فيه الكفاية "يضيف خاصية خاصية حقيبة."

http://msdn.microsoft.com/en-us/library/aa506384.aspx

AddProperty( [في سلسلة] const wchar_t *pszName, [في] const البديل *pVar );

ونحن استخدام التعليمات البرمجية التالية لإضافة سلسلة الملكية حقيبة.

CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);

الأمر واضح جدا ، على الرغم من أن CComBSTR و CComVariant الذي تم إنشاؤه يخرج من نطاق بعد حين.أنا لست متأكدا مما إذا كان PropertyBag مقابض السلسلة في كل نسخة.حيث يمكننا تخزين جميع أنواع الأشياء داخل البديل, هذا لا ينبغي أن يكون الحال.

على افتراض السلسلة لم يتم التعامل مع سؤالي هو: ما هو نمط تفعل هذا في كوم ؟ كيف يجب أن تمر البديل الذي يحتوي على سلسلة مخصصة ، وجعل هذه السلسلة متوفرة على المواضيع الأخرى حتى لو كان الخيط الذي يسمى AddProperty مات أولا ، و دي-تخصيص السلسلة بشكل صحيح ؟

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

المحلول

عند استدعاء COM وظيفة مع سلاسل أو المتغيرات في معظم الحالات فقط garantuee المطلوب هو أن هذه الكائنات المتوفرة في جميع أنحاء الدعوة نفسها.بعد المكالمة ، الكائن نفسه هو المسؤول عن صنع نسخ من البيانات.على سبيل المثال البديل هو الأرجح استخدام VariantCopy وظيفة من شأنها أن نسخ سلاسل, نسخ كائنات COM (يزيد مرجع).الشيء الوحيد الذي يجب أن تقلق بشأنه هو عند تمرير واجهة الفعلية في البديل:في هذه الحالة يجب أن تكون واجهة بشكل صحيح مرجع حساب ، QueryInterface, AddRef و إطلاق سراح جميع تنفذ وفقا لذلك.و لا من أي وقت مضى تخصيص هذا الكائن قبل مرجع تصل إلى 0 ;)

تحرير:و إذا كنت ترغب في معرفة المزيد حول COM البرمجة, تأكد من الحصول على "الأساسية COM" قبل "لا مربع".لا مربع على COM المعلم هذا الكتاب سوف يعلمك أي شيء تقريبا كنت تريد أن تعرف حول COM و أكثر ;)

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