我使用C#4.0实例化Excel.Application
并打开Excel.Workbook
。剥离,我的代码看起来像这样:
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open("someFile");
Open()
方法有一些我不需要提供的可选值。这很方便,除了我不知道这些可选参数的默认值是什么。因此,我无法决定是否必须提供价值。
在这种情况下,我可以在MSDN文档中找到某些参数所需的信息。是否有通用的方法来确定COM互操作类型中可选参数的默认值?
更新
在oleview
上使用MSO.dll
,我检查了Workbook
接口的相应IDL。对于SaveAs()
方法,它看起来像这样:
HRESULT SaveAs(
[in, optional] VARIANT Filename,
[in, optional] VARIANT FileFormat,
[in, optional] VARIANT Password,
blahblah...
[in, optional, defaultvalue(1)] XlSaveAsAccessMode AccessMode,
blahblah...
[in, optional] VARIANT Local,
[in, lcid] long lcid);
在Visual Studio中,intellisense为大多数参数显示[object Filename = Type.Missing]
,我认为这是有意义的,因为IDL不提供有关类型(VARIANT
)的任何信息,也不提供任何默认值。但是,对于参数AccessMode
,IDL提供所需信息,智能感知显示它。
所以我想现在的问题是:为什么IDL对所有参数的类型(和默认值)没有更具体的说明,就像AccessMode
一样?
答案 0 :(得分:3)
为什么IDL没有更具体的类型(和默认值)
特定于类型,它是VARIANT。它没有具有特定于默认值,变量能够指定“未指定”。实际上可以在类型库中指定默认值,您可以从反向工程IDL中看到它。
这里有很多灵活性。但是如果变量值是“未指定”,那么COM服务器将替换它认为是默认值的任何值,或者给它指定未指定的特定行为。找出可能是什么的唯一方法是通过文档。这确实不总是很棒。