Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/wrap-cs-in-com/.
Пусть у нас имеется C#-класс, который делает что-нибудь полезное, например:
public class Calculator { public int Sum(int a, int b) { return a + b; } }
Давайте создадим для этого класса COM-интерфейс, чтобы его функциональность можно было использовать в других местах. В конце посмотрим на использование этого класса в среде Delphi.
Для начала нужно пойти в свойства проекта и на вкладке Build поставить галочку напротив Register for COM interop:
Далее создаём интерфейс для нашего класса:
public interface ICalculator { int Sum(int a, int b); } public class Calculator : ICalculator { public int Sum(int a, int b) { return a + b; } }
Класс и интерфейс нужно пометить рядом атрибутов: следует указать для них уникальные GUID-ы, указать ComVisible(true)
, а для класса также добавить атрибут ClassInterface(ClassInterfaceType.None)
:
[Guid("364C5E66-4412-48E3-8BD8-7B2BF09E8922")] [ComVisible(true)] public interface ICalculator { int Sum(int a, int b); } [Guid("8C034F6A-1D3F-4DB8-BC99-B73873D8C297")] [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] public class Calculator : ICalculator { public int Sum(int a, int b) { return a + b; } }
Уже почти всё готово! Можно собирать готовый вариант нашей сборки. Благодаря галочке Register for COM interop COM-компнент сам зарегистрируется в системе, но регистрацию можно провести и руками. Делается это с помощью утилиты RegAsm, которую можно найти в "C:\Windows\Microsoft.NET\Framework\v<номер нужной версии>\". С помощью аргумента /tlb
можно попутно создать сопутствующий tlb-файл. Отменить регистрацию сборки поможет атрибут /u
. Итак, выполним команду (будем считать, что название проекта и соответствующей dll — ComCalculator):
RegAsm.exe Calculator.dll /tlb
Отлично, теперь наш компонент зарегистрирован! Давайте откроем Delphi и попробуем его использовать. После создания нового проекта (пусть это будет обычный WinForms-проект) нужно импортировать в него ComCalculator. Выбираем из меню Project пункт Import Type Library. В списке находим ComCalculator и жмём Install:
В файле Unit1.pas
необходимо добавить ComCalculator_TLB
в раздел uses
. После этого у вас могут быть проблемы с компиляцией mscorlib_TBL.pas
. Если это так, то просто удалите ссылку на него из раздела uses
файла ComCalculator_TLB.pas
.
Теперь попробуем использовать наш COM-компонент. Будем это делать прямо в конструкторе формы. Тело конструктора будет содержать две незамысловатые строчки: в первой мы создадим экземпляр класса TCalculator
, а во второй вызовем метод Sum
, результат вычислений покажем с помощью процедуры ShowMessage
.
procedure TForm1.FormCreate(Sender: TObject); var calculator : TCalculator; begin calculator := TCalculator.Create(Self); ShowMessage(IntToStr(calculator.Sum(1, 2))); end;
Запустив приложение, вы сможете увидеть появившееся окошечко с цифрой 3 и порадоваться. Для более сложных вариантов создания COM-объектов рекомендуются к изучению следующие статьи:
Комментариев нет:
Отправить комментарий