COM如何支持可选参数?

时间:2009-09-23 02:55:38

标签: c# .net com

但是,COM如何支持他们? C ++是否支持它们?假设所有COM代码都是用C ++编写的,我不知道吗?或者COM只是一种方法论,一种构建应用程序的方法吗?

我很好奇。我最近一直在用C#写很多COM自动化,这个问题刚好发生在我身上。

2 个答案:

答案 0 :(得分:3)

此链接可能有助于回答有关可选参数的问题(答案是“是”,您可以执行此操作): http://msdn.microsoft.com/en-us/library/f25e2b6b%28VS.80%29.aspx

com是二进制规范。您可以在技术上创建任何语言的com对象(服务器)。微软的语言显然(险恶?)比其他语言更容易,因为他们编写了规范。从技术上讲,可以直接创建一个com服务器。实际上,这是一项艰巨的任务。

最好的问候, 别

答案 1 :(得分:3)

如果您正在使用C / C ++(或旧版本的Delphi)中的COM和Automation,则应将VARIANT用于要使其成为可选参数。此外,COM不支持C ++样式中定义的可选参数。

也就是说,对于那些在调用另一个对象时要提供的VARIANT,并且要指定可选参数(例如,通过自动化与MS Word或Excel交谈时),您需要使用类型初始化那些VARIANTS VT_ERROR和scode字段设置为DISP_E_PARAMNOTFOUND。

当从其他能够省略参数的对象(VBScript,JScript)接收调用时,您需要检查所有VARIANT,以查找类型已设置为VT_ERROR且scode字段为DISP_E_PARAMNOTFOUND的情况。

.NET等价物是将一组对象设置为Type.Missing,用于映射到COM可选参数的那些参数。以下链接可能有助于了解故事的两个方面。

.NET4Office : Type.Missing, C#, and Word (MSDN Blog)

所有这些都取决于旧版本的VB(6和以前版本)如何处理可选参数。这是一个非常简洁的MS Support KB链接。

How to pass optional parameters when you call a function from C++ (kb238981)

为了解决您的其他问题,假设大多数COM对象是用C ++编写的,这是不正确的,因为COM严格地以众所周知的方式声明接口的接口和布局。只要用户观察并遵守支持的接口的布局,使用哪种语言或工具来制作COM对象并不重要。

最后,你对COM作为一种方法论是正确的 - 不是在为任何特定应用程序设置架构的意义上,而是为了强有力地定义可能构成应用程序的互连组件,或者可以使其可用于其他应用程序。