繁体   English   中英

访问Excel文件时返回C#System .__ ComObject

[英]C# System.__ComObject returned when accessing Excel file

我试图通过以下代码访问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);

书籍变量的最后一行内容是System.__ComObject而在不同的应用程序代码中工作,变量有...Excel.WorkbookClass

所以我想问一下这种奇怪行为可能是什么原因。 我已经尝试使用额外的Missing.Value args调用Workbooks.Open,但结果是一样的。

.NET 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM