Avec une méthode d'interface COM déclarée comme ceci:peut serveur COM réallouer ([in, out] CACLSID * arg)?
[ object,
uuid(....),
]
interface IFoo : IUnknown
{
HRESULT Foo([in, out] CACLSID * items);
}
En ce qui concerne marshalling, le serveur est autorisé à réattribuer le tableau compté? Son implémentation actuelle ne remplace que les identifiants existants, mais je voudrais implémenter une modification (qui ne casserait pas le contrat) qui pourrait retourner plus d'éléments sans introduire une nouvelle interface.
[edit] Veuillez noter que CACLSID est déjà un tableau, contenant un nombre et un pointeur.
Oui, CACLSID = struct {unsigned long cElems; CLSID * pElems; } où pElems est alloué en utilisant CoAlloc. Donc, pas exactement "allouer un nouveau tableau", mais "redimensionner le tableau existant - ce qui est probablement la raison pour laquelle je ne suis pas sûr." } – peterchen
Je suis sûr que vous n'êtes pas autorisé à le redimensionner lorsque votre IDL ressemble à ce qu'il est. pour utiliser ce que l'on appelle des tableaux ouverts si vous avez besoin de redimensionner quelque chose comme: HRESULT Foo ([en] long cMax, [in, out] longtemps * pcActual, [in, out, size_is (cMax), length_is (* pcActual)] CLSID * pElemn) –
Comme je l'ai dit je n'ai pas programmé COM depuis longtemps mais j'ai ouvert mon "COM Essentiel" par Don Box et je l'ai trouvé :-) –