Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 从C应用程序调用本地.NET(2)COM+组件_C#_.net_Com+ - Fatal编程技术网

C# 从C应用程序调用本地.NET(2)COM+组件

C# 从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动态关键字使之易于实现。下面是在任何机器上

我已经创建了一个.NET 2 COM+组件,供我们古老的经典ASP网站使用。这是非常简单的经典ASP

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+像在生产环境中一样在本地机器上运行。