2009-09-23 61 views
2

但是,COM如何支持他们? C++是否支持它们?假定所有的COM代码都是用C++编写的,是不是无知?或者COM只是一种方法,是构建应用程序的一种方式?COM如何支持可选参数?

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

回答

3

这个链接可以帮助解答有关可选参数的问题(答案是“是”,你可以做他们): http://msdn.microsoft.com/en-us/library/f25e2b6b%28VS.80%29.aspx

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

最好的问候, 不要

3

如果你用C/C++(或旧版本的Delphi)COM和自动化工作,你应该使用变数要进行可选的参数。此外,COM不支持C++样式中定义的可选参数。这就是说,对于在调用另一个对象时要提供的那些VARIANT,并且您想要指定可选参数(例如,通过自动化与MS Word或Excel交谈时),您需要用这些VARIANTS初始化这些VARIANTS键入VT_ERROR并将scode字段设置为DISP_E_PARAMNOTFOUND。

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

.NET的等价物是将映射到COM可选参数的参数设置为Type.Missing。以下链接可能有助于查看故事的两面。

.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是一种方法论是正确的 - 不是在为任何特定应用程序设置架构的意义上,而是为了强化定义可能组成应用程序或可以使用的互连组件到其他应用程序。