Эксклюзивное использование VARIANT в интерфейсе COM

Я унаследовал проект, который включает в себя COM DLL. Я новичок в COM, но что-то не так. Интерфейс, определенный в IDL, использует только VARIANT тип для всех свойств и возвращаемых методов / параметров. Есть ли возможное оправдание этому? У меня такое чувство, что предыдущий разработчик просто кое-что делал, но хочу быть уверенным.

Вот как выглядит мой IDL:

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);
};

Большое спасибо.

РЕДАКТИРОВАТЬ:

Чтобы было понятно, все эти VARIANTs можно заменить явными типами.

-1

Решение

Если вам нужна производительность или упрощение, вы меняете тип VARIANT для соответствующих значений, более близко к используемому типу. Помните, это разрыв интерфейса.
Просмотр допустимых значений для использования:
Типы данных COM

1

Другие решения

Ваш интерфейс происходит от IDispatch Это означает, что это двойной интерфейс — вы можете вызывать методы непосредственно из интерфейса или вызывать их через iDispatch::Invoke. Параметры, переданные в Invoke все должны быть типа VARIANTARG это просто другое название VARIANT, увидеть http://msdn.microsoft.com/en-us/library/ms891678.aspx.

1

Для определенных типов двойных интерфейсов, которые предполагают работать с VB и скриптовые языки лучше использовать VARIANT это прямой тип. Например, лучше использовать VARIANT в течение почти всех видов SAFEARRAY и указатели интерфейса. Но вы можете проверить и увидеть.

0
По вопросам рекламы [email protected]