2008-12-15 4 views
11

У меня есть сборка .NET, с которой я столкнулся с COM через tlb-файл и установщик, который регистрирует tlb. Я вручную проверил, что установщик работает правильно и что COM-клиенты могут получить доступ к библиотеке. Пока что так хорошо ...Возможно ли протестировать сборку COM с помощью .NET?

Однако я пытаюсь собрать некоторые автоматизированные системные тесты, которые проверяют правильность работы установщика. В рамках этого я автоматизировал установку на виртуальной машине, и теперь я хочу сделать некоторые звонки в установленную библиотеку COM, чтобы убедиться, что она работает правильно. Первоначально я думал о написании некоторых тестов в VB6, но у меня уже есть большой набор тестов, написанных на C#, которые ссылаются на сборку .NET. Я надеялся, что могу изменить их, чтобы ссылаться на .tlb, но я получаю сообщение об ошибке, когда я пытаюсь это сделать в VS2008:

Библиотека типа «blah.tlb» ActiveX была экспортирована из сборки .NET и не может быть добавлена как ссылка.

Есть ли способ, которым я могу обмануть VS2008, чтобы позволить мне добавить эту ссылку, возможно, отредактировав файл tlb?

Googling не придумал никаких решений. Все, что я нашел это в статье Microsoft Connect о том, что это «By Design»: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=120882

+0

Несколько человек упомянули использование tlbimp.exe. Если я попробую tlbimp.exe blah.tlb, я получу ошибку: «Тип библиотеки blah был экспортирован из сборки CLR и не может быть повторно импортирован как сборка CLR». – Akash 2008-12-15 11:35:47

ответ

12

. Ближайшее я получил решение. что-то вроде следующего:

using System; 
class ComClass 
{ 
    public bool CallFunction(arg1, arg2) 
    { 
     Type ComType; 
     object ComObject; 

     ComType = Type.GetTypeFromProgID("Registered.ComClass"); 
     // Create an instance of your COM Registered Object. 
     ComObject = Activator.CreateInstance(ComType); 

     object[] args = new object[2]; 
     args[0] = arg1; 
     args[1] = arg2; 

     // Call the Method and cast return to whatever it should be. 
     return (bool)ComType.InvokeMember("MethodToCall", BindingFlags.InvokeMethod, null, ComObject, args)) 
    } 
} 

Это не очень красиво, но я думаю, имеет смысл. Конечно, вы могли бы добавить экземпляр ComObject в конструктор и обернуть остальные вызовы объекту, но, вероятно, не обязательно для тестового кода.

-1

Использование tlbimp.exe вы можете создать сборку из вашего COM-компонента, который может быть использован в коде .NET

+2

Не, если COM-компонент был создан на языке C# или другом языке .NET – 2011-04-18 19:04:44

+2

-1 так же, как и комментарий: не если COM-компонент был создан на C# или другом языке .NET – peenut 2011-08-30 10:56:51

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^