当前位置:  开发笔记 > 编程语言 > 正文

C#.NET是否支持IDispatch后期绑定?

如何解决《C#.NET是否支持IDispatch后期绑定?》经验,为你挑选了3个好方法。

相对而言,您可以在C#中使用后期绑定IDispatch绑定.

http://support.microsoft.com/kb/302902

这是使用Excel的一些示例.这样你就不需要在微软臃肿的PIA上添加不必要的依赖:

//Create XL
Object xl = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));

//Get the workbooks collection.
//   books = xl.Workbooks;
Object books = xl.GetType().InvokeMember( "Workbooks", 
      BindingFlags.GetProperty, null, xl, null);

//Add a new workbook.
//   book = books.Add();
Objet book = books.GetType().InvokeMember( "Add", 
      BindingFlags.InvokeMethod, null, books, null );

//Get the worksheets collection.
//   sheets = book.Worksheets;
Object sheets = book.GetType().InvokeMember( "Worksheets",
      BindingFlags.GetProperty, null, book, null );

Object[] parameters;

//Get the first worksheet.
//   sheet = sheets.Item[1]
parameters = new Object[1];
parameters[0] = 1;
Object sheet = sheets.GetType().InvokeMember( "Item", 
      BindingFlags.GetProperty, null, sheets, parameters );

//Get a range object that contains cell A1.
//   range = sheet.Range["A1];
parameters = new Object[2];
parameters[0] = "A1";
parameters[1] = Missing.Value;
Object range = sheet.GetType().InvokeMember( "Range",
      BindingFlags.GetProperty, null, sheet, parameters );

//Write "Hello, World!" in cell A1.
//   range.Value = "Hello, World!";
parameters = new Object[1];
parameters[0] = "Hello, World!";
objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
      null, range, parameters );

//Return control of Excel to the user.
//   xl.Visible = true;
//   xl.UserControl = true;
parameters = new Object[1];
parameters[0] = true;
xl.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
      null, xl, Parameters );
xl.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
      null, xl, Parameters );


thaBadDawg.. 9

你必须等待C#4.0出来才能获得你想要的后期绑定.每当我需要互操作能力时,我都会切换回VB.Net模式,这样我就可以利用C#似乎缺乏的COM功能.

我使用的简单方法是在VB.Net中创建一个类,它执行IDispatch工作,然后公开我想用作包装器方法的方法,然后我可以从我的C#代码中随意调用它们.不是最优雅的解决方案,但它在过去的几个月里让我脱离了一两个.



1> Ian Boyd..:

相对而言,您可以在C#中使用后期绑定IDispatch绑定.

http://support.microsoft.com/kb/302902

这是使用Excel的一些示例.这样你就不需要在微软臃肿的PIA上添加不必要的依赖:

//Create XL
Object xl = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));

//Get the workbooks collection.
//   books = xl.Workbooks;
Object books = xl.GetType().InvokeMember( "Workbooks", 
      BindingFlags.GetProperty, null, xl, null);

//Add a new workbook.
//   book = books.Add();
Objet book = books.GetType().InvokeMember( "Add", 
      BindingFlags.InvokeMethod, null, books, null );

//Get the worksheets collection.
//   sheets = book.Worksheets;
Object sheets = book.GetType().InvokeMember( "Worksheets",
      BindingFlags.GetProperty, null, book, null );

Object[] parameters;

//Get the first worksheet.
//   sheet = sheets.Item[1]
parameters = new Object[1];
parameters[0] = 1;
Object sheet = sheets.GetType().InvokeMember( "Item", 
      BindingFlags.GetProperty, null, sheets, parameters );

//Get a range object that contains cell A1.
//   range = sheet.Range["A1];
parameters = new Object[2];
parameters[0] = "A1";
parameters[1] = Missing.Value;
Object range = sheet.GetType().InvokeMember( "Range",
      BindingFlags.GetProperty, null, sheet, parameters );

//Write "Hello, World!" in cell A1.
//   range.Value = "Hello, World!";
parameters = new Object[1];
parameters[0] = "Hello, World!";
objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
      null, range, parameters );

//Return control of Excel to the user.
//   xl.Visible = true;
//   xl.UserControl = true;
parameters = new Object[1];
parameters[0] = true;
xl.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
      null, xl, Parameters );
xl.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
      null, xl, Parameters );



2> thaBadDawg..:

你必须等待C#4.0出来才能获得你想要的后期绑定.每当我需要互操作能力时,我都会切换回VB.Net模式,这样我就可以利用C#似乎缺乏的COM功能.

我使用的简单方法是在VB.Net中创建一个类,它执行IDispatch工作,然后公开我想用作包装器方法的方法,然后我可以从我的C#代码中随意调用它们.不是最优雅的解决方案,但它在过去的几个月里让我脱离了一两个.



3> configurator..:

C#4的dynamic关键字支持IDispatch和后期绑定.您可以阅读Sam Ng的动态系列以获取更多信息

哦,C#4今天只作为CTP提供.您必须等待Visual Studio vNext或使用beta(在Windows Server 2008 Virtual PC上运行)才能使用它.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有