C# 从C应用程序调用本地.NET(2)COM+组件
我已经创建了一个.NET 2 COM+组件,供我们古老的经典ASP网站使用。这是非常简单的经典ASPC# 从C应用程序调用本地.NET(2)COM+组件,c#,.net,com+,C#,.net,Com+,我已经创建了一个.NET 2 COM+组件,供我们古老的经典ASP网站使用。这是非常简单的经典ASP Dim MenuManager : Set MenuManager = Server.CreateObject("MenuManager.MenuManager") 但是,我想使用C控制台应用程序对组件进行性能评测 如何从C控制台应用程序中调用它?您正在使用CreateObject函数的后期绑定。你想要窃取、乞讨或借用VS2010的副本,以使用C4.0动态关键字使之易于实现。下面是在任何机器上
Dim MenuManager : Set MenuManager = Server.CreateObject("MenuManager.MenuManager")
但是,我想使用C控制台应用程序对组件进行性能评测
如何从C控制台应用程序中调用它?您正在使用CreateObject函数的后期绑定。你想要窃取、乞讨或借用VS2010的副本,以使用C4.0动态关键字使之易于实现。下面是在任何机器上都可以使用的类似代码。它使用后期绑定来创建FileSystemObject COM组件,前两行相当于您的代码段。它列出了c:\windows文件夹的子目录:
using System;
class Program {
static void Main(string[] args) {
var type = Type.GetTypeFromProgID("Scripting.FileSystemObject");
dynamic obj = Activator.CreateInstance(type);
dynamic win = obj.GetFolder("c:/windows");
foreach (dynamic subwin in win.SubFolders) {
Console.WriteLine(subwin.Name);
}
Console.ReadLine();
}
}
如果不能使用C版本4,则考虑使用VB.NET。它具有相同的语法,还具有CreateObject函数。
要从C调用本机代码COM对象,请选择“添加引用”,然后选择“COM”选项卡,并使用它向COM对象的类型库添加引用。这将运行TLBIMP来导入您的类型库,并为COM对象生成一组漂亮的包装器和类型。然后,您只需使用这些类型和包装器来实例化COM对象并调用其方法 这不适用于使用托管代码实现的COM对象。TLBIMP工具注意到类型库是从托管代码生成的,并拒绝导入它。相反,它建议您只向程序集添加一个.NET引用您可以手工构建一组COM包装器。但是,如果你可以使用@Hans建议的更简单的解决方案,那么这似乎是一项非常艰巨的工作顺便说一句,我不希望只引用.NET dll,我实际上希望COM+像在生产环境中一样在本地机器上运行。