c#系统.访问Excel文件时返回__ComObject
本文关键字:返回 ComObject 文件 系统 访问 Excel | 更新日期: 2023-09-27 18:15:14
我试图通过下面的代码访问Excel文件:
Microsoft.Office.Interop.Excel.Application ObjExcel
= new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook book;
Microsoft.Office.Interop.Excel.Worksheet sheet;
Excel.Range range1 = null, range2 = null;
CultureInfo ci = new CultureInfo("en-US");
Thread thisThread = Thread.CurrentThread;
thisThread.CurrentCulture = new CultureInfo("en-US");
book = ObjExcel.Workbooks.Open(LinguisticInstructionsFileName);
book变量的最后一行内容是System.__ComObject
,而在不同的应用程序代码中工作,变量是...Excel.WorkbookClass
。
所以我想问一下这种奇怪行为的原因是什么。我已经试着给工作手册打电话了。打开额外的Missing。
。. COM实现使用代理对象,这些代理在内部生成并派生自System。__ComObject所以这是一个正常的行为。它们是一种"动态对象"。你可以将__ComObject强制转换为你需要的接口或类。你可以将它强制转换为WorkbookClass,没有问题。
这完全取决于你如何获得实例…如果用new创建对象,例如new WorkbookClass
, c#将直接创建强类型对象。相反,如果对象从COM函数或属性返回,它通常返回__ComObject,这是因为__ComObject几乎可以是任何东西,可以被强制转换为几个接口,当然c#不知道该返回什么,所以它返回这种特殊的"动态"对象。这些对象被称为RCW,即Runtime Callable Wrapper。
一个不错的阅读可以是http://www.codeproject.com/KB/cs/cominteropnet.aspx