Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Com OLE服务器_C#_.net_Com_Ole - Fatal编程技术网

C#Com OLE服务器

C#Com OLE服务器,c#,.net,com,ole,C#,.net,Com,Ole,我正试图找出使用C#.NET与OLE服务器交互的最佳方式 我发现了一些能够与COM+交互的代码,这些代码似乎适用于OLE服务器,但我想知道是否有更优雅或更简单的方法 我要求它晚点出发 代码(从网上其他地方盗取) 显然,在我的例子中,我将我的ole服务器的名称放在Excel.Application所在的位置,但我在早期绑定中看到过这样的情况,即可以直接从对象调用函数,而不必通过“InvokeMember” 这可能吗?我可以使用类型强制转换为对象作为我的类型吗 谢谢。如果您使用的是.NET 4.0,

我正试图找出使用C#.NET与OLE服务器交互的最佳方式

我发现了一些能够与COM+交互的代码,这些代码似乎适用于OLE服务器,但我想知道是否有更优雅或更简单的方法

我要求它晚点出发

代码(从网上其他地方盗取)

显然,在我的例子中,我将我的ole服务器的名称放在Excel.Application所在的位置,但我在早期绑定中看到过这样的情况,即可以直接从对象调用函数,而不必通过“InvokeMember”

这可能吗?我可以使用类型强制转换为对象作为我的类型吗


谢谢。

如果您使用的是.NET 4.0,您可以使用
动态
而不是
对象
,并像调用成员一样调用它们。然后,将在运行时检查它,如果名称正确,则执行它

//Get the excel object  
var excel = Type.GetTypeFromProgID("Excel.Application"); 

//Create instance of excel  
dynamic excelObject = Activator.CreateInstance(excel); 
excelObject.Visible = true;

请尝试从添加引用中查看这一点。它为您提供了对Excel的有用访问。 Microsoft.Office.Core Microsoft.Office.Interop.Excel

using Excel = Microsoft.Office.Interop.Excel;

单元格和工作表等的访问方式如下:

Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.Item[1];
worksheet.Cells.Item[6, 1]).Value;

它被称为COM,而不是OLE。奥立已经死了,埋了一段时间了。这将帮助您找到“添加引用”对话框中的选项卡。显然,我试图引用的是一个OLE服务器它肯定是一个OLE应用程序,它是一个.exe,并且是自注册的。。。我知道COM+诞生于OLE,但这是一个OLE服务器。请使用“添加引用”对话框中的“OLE”选项卡:)添加引用不会使绑定提前吗?另外,Excel只是另一个ole服务器的示例。
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
    Excel.Application app;
    Excel.Workbook workbook;

    app = new Excel.ApplicationClass();
    app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;

    workbook = app.Workbooks.Open(  openFileDialog.FileName,
                                    0,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing,
                                    Type.Missing);

    return workbook;
}
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.Item[1];
worksheet.Cells.Item[6, 1]).Value;