J'ai hérité d'un projet qui inclut une DLL COM. Je suis un peu nouveau à COM mais quelque chose ne me semble pas correct. L'interface définie dans l'IDL utilise uniquement le type VARIANT
pour toutes les propriétés et les retours/paramètres de méthode. Y a-t-il une justification possible à cela? J'ai le sentiment que le développeur précédent était en train d'aileronner des choses, mais je veux être sûr.L'utilisation exclusive de VARIANT dans une interface COM
Voici ce que mon IDL ressemble:
interface IMyComInterface : IDispatch
{
[id(1), helpstring("method CheckMessage")] HRESULT CheckMessage([in] VARIANT vMsg);
[id(2), helpstring("method CheckFolder")] HRESULT CheckFolder([in] VARIANT Folder, [out] VARIANT *pCount, [out, retval] VARIANT *pErrorCount);
[propget, id(3), helpstring("property Flags")] HRESULT Flags([out, retval] VARIANT *pVal);
[propput, id(3), helpstring("property Flags")] HRESULT Flags([in] VARIANT newVal);
[propget, id(4), helpstring("property MessageStore")] HRESULT MessageStore([out, retval] VARIANT *pVal);
[propput, id(4), helpstring("property MessageStore")] HRESULT MessageStore([in] VARIANT newVal);
[propget, id(5), helpstring("property Directory")] HRESULT Directory([out, retval] VARIANT *pVal);
[propput, id(5), helpstring("property Directory")] HRESULT Directory([in] VARIANT newVal);
[propget, id(6), helpstring("property MessageCount")] HRESULT MessageCount([out, retval] VARIANT *pVal);
};
Remercie beaucoup.
EDIT:
Pour rendre les choses claires, toutes ces VARIANT
s pourraient être remplacés par des types explicites.
On dirait que vous avez hérité de mon projet. désolé: p donc VARIANT sont des types génériques qui peuvent être n'importe quoi. Ils sont comme Object dans C#. L'idée est que ces types peuvent changer à l'exécution. Ceci afin que votre interface puisse être compatible avec les langages de liaison de type à l'exécution (tels que VB, C#, etc.). – thang
Bien, vérifiez d'abord la gestion des erreurs dans le code. Nice s'il génère un message d'erreur amical à travers IErrorInfo. Si vous laissez à la mise en œuvre du stock IDispatch alors le DISP_E_BADVARTYPE, "Type de variable incorrect" que vous obtiendriez quand une variable du type incorrect est passé n'est pas le plus grand. Obtenez une meilleure réponse en décrivant le langage de script le plus couramment utilisé avec ce serveur. –
Seule une application C++ utilise ce serveur COM. –