VARIANT在COM接口中的独占使用
The exclusive use of VARIANT in a COM interface
我继承了一个包含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);
};
非常感谢。
编辑:
为了清楚起见,所有这些VARIANT
都可以用显式类型来代替。
如果您需要性能或简化,可以将VARIANT类型更改为适当的值,更接近所使用的类型。记住,这是一个接口中断
查看要使用的有效值:
COM数据类型
您的接口派生自IDispatch
,这意味着它是一个双接口-您可以直接从接口调用方法,也可以通过iDispatch::Invoke
调用它们。传递给Invoke
的参数都必须是VARIANTARG
类型,这只是VARIANT
的另一个名称,请参阅http://msdn.microsoft.com/en-us/library/ms891678.aspx.
对于某些类型的双接口,假设可以使用VB
和脚本语言,最好使用直接类型的VARIANT
。例如,最好在几乎所有类型的SAFEARRAY
和接口指针上使用VARIANT
。但你可以试试看。
相关文章:
- COM 接口 c# 封送数组数组
- 如何通过COM接口将64位整数从C++发送到C#
- 如何在C++中用属性声明COM接口
- 从 COM 接口中的函数返回多个值
- 使用带有COM接口的STL智能指针
- 将指向COM接口指针的指针从托管c++传递到.NET c#
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 创建 COM 接口指针在开发计算机上有效,但会导致其他计算机上的应用程序崩溃
- 如何用C 包裹的COM接口部署C#库
- 从未通过 C# 注册C++ COM 服务器访问 COM 接口
- 如何将共享_ptr用于com接口指针
- hook COM接口抛出vTable
- 为什么 COM 接口协定不可变
- 我可以在Qt应用程序中使用现有的本机Windows COM接口吗
- 为什么MS Word在我发布最后一个COM接口后没有关闭?
- 将COM接口指针传递给函数
- VDS(虚拟磁盘服务)COM接口通知-仅在注销期间调用回调(接收器)(Unadvise)
- 有没有办法将 COM 接口 GUID 转换为接口的字符串名称
- 在 C++ 中声明的 COM 接口
- 嵌入 Chakra JavaScript 引擎无法初始化 COM 接口