Question

OK, je ne pouvais donc pas vraiment penser à un titre à propos qui résume cela.

L’interface IPrintPipelinePropertyBag a la méthode AddProperty qui ajoute assez bien une propriété à un panier de propriétés. "

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

  

AddProperty ([in, string] const   wchar_t * pszName, [in] const   VARIANT * pVar);

Nous utilisons le code suivant pour ajouter une chaîne au sac de propriétés.

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

Cependant, il est assez évident que les fichiers CComBSTR et CComVariant créés disparaissent après un certain temps. Je ne sais pas si le PropertyBag gère la chaîne et crée sa propre copie. Comme nous pouvons stocker toutes sortes de choses dans un VARIANT, cela ne devrait pas être le cas.

En supposant que la chaîne ne soit pas gérée, ma question est la suivante: quel est le modèle utilisé pour cela dans COM? Comment devrais-je passer un VARIANT contenant une chaîne allouée, rendre cette chaîne disponible pour d'autres threads, même si le thread qui a appelé AddProperty est mort en premier, et désallouer correctement la chaîne?

Était-ce utile?

La solution

Lorsque vous appelez une fonction COM avec des chaînes ou des VARIANTS, dans la plupart des cas, la seule garantie nécessaire est que ces objets soient disponibles tout au long de l'appel. Après l'appel, l'objet lui-même est responsable de la copie des données. Par exemple, VARIANT utilisera très probablement la fonction VariantCopy qui copiera les chaînes, copiera les objets COM (augmentera le nombre de références). La seule chose dont vous devez vous soucier est lorsque vous passez une interface réelle dans VARIANT: dans ce cas, l'interface doit être correctement comptée par référence et QueryInterface, AddRef et Release doivent tous être implémentés en conséquence. Et ne désallouez jamais cet objet avant que le compte de références n'atteigne 0;)

EDIT: Oh, et si vous souhaitez en savoir plus sur la programmation COM, assurez-vous d’obtenir "Essential COM". par "Don Box". Don Box est le gourou COM, et ce livre vous apprendra presque tout ce que vous voudriez savoir sur COM et plus encore;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top