我需要在服务器上创建一个COM对象。
在VB中你可以这样做:(tutorial)
xlApp = CreateObject("Excel.Application", "\\MyServer")
但是如何在C#上做同样的事情?
我知道如何在本地做到这一点:
var infsrv = new InfoServ.TInfoServerClass();
但不知道如何在服务器上这样做..
答案 0 :(得分:3)
添加对Microsoft.VisualBasic的引用没有任何问题,因此您可以简单地使用相同的方法。这非常适合.NET,不使用它会浪费。然而,这很简单,只需两行代码:
public static object CreateObject(string progid, string server) {
var t = Type.GetTypeFromProgID(progid, server, true);
return Activator.CreateInstance(t);
}
好吧,如果你按下它就行了一行。在这种特定情况下,您绝对应该考虑添加对Microsoft.Office.Interop.Excel的引用。然后,您可以简单地使用 new 运算符,获得更快的代码,因为您没有后期绑定和获取IntelliSense。如果您想坚持使用后期绑定,请务必使用C#version 4支持 dynamic 关键字。在早期的C#版本中编写后期绑定代码非常痛苦。
答案 1 :(得分:2)
您可以将Microsoft.VisualBasic.dll
的引用添加到C#项目中,并直接使用CreateObject
。如果您有一个使用大量VB.NET特定功能的现有代码库,这可能是最简单的解决方案:
using Microsoft.VisualBasic;
...
dynamic xlApp = Interaction.CreateObject("Excel.Application", "MyServer");
注意:由于反斜杠是C#中的特殊字符,因此请从服务器名称中删除\\
(参见上文)或转义字符串@"\\MyServer"
。
答案 2 :(得分:1)
使用 Type.GetTypeFromCLSID 的this overload。