Вызов локального компонента .NET (2) COM + из приложения C # - PullRequest
2 голосов
/ 11 июня 2011

Я создал компонент .NET 2 COM + для использования на нашем устаревшем классическом веб-сайте ASP.Это делается довольно просто в классическом ASP ...

Dim MenuManager : Set MenuManager = Server.CreateObject("MenuManager.MenuManager")

Однако я хочу профилировать производительность компонента с помощью консольного приложения C #.

Как мне вызвать это из C #консольное приложение?

Ответы [ 2 ]

7 голосов
/ 11 июня 2011

Вы используете позднее связывание с функцией CreateObject ().Вы хотите украсть, попросить или одолжить копию VS2010, чтобы использовать ключевое слово C # 4.0 dynamic , чтобы сделать это легко.Вот аналогичный код, который работает на любой машине.Для создания COM-компонента FileSystemObject используется поздняя привязка, первые две строки эквивалентны вашему фрагменту кода.В нем перечислены подкаталоги папки 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 ().

0 голосов
/ 11 июня 2011

Чтобы вызвать COM-объект с собственным кодом из C #, выберите «Добавить ссылку», а затем перейдите на вкладку «COM» и используйте ее для добавления ссылки в библиотеку типов вашего COM-объекта.Это запустит TLBIMP для импорта вашей библиотеки типов и генерации хорошего набора оболочек и типов для COM-объекта.Тогда вы просто используете эти типы и оболочки для создания экземпляра вашего COM-объекта и вызова его методов.

Это не будет работать для COM-объектов, реализованных с использованием управляемого кода.Инструмент TLBIMP замечает, что библиотека типов была сгенерирована из управляемого кода, и отказывается импортировать ее.Вместо этого предлагается просто добавить ссылку .NET к сборке.

Возможно, вы сможете собрать набор оберток COM вручную , как описано здесь .Но это кажется огромной работой, когда вы могли бы использовать гораздо более простое решение, предложенное @ Hans

...