Создание .Ocx файла из .Net Dll - PullRequest
3 голосов
/ 30 мая 2011

У меня есть .Net Com Dll, можно ли использовать эту dll и создать файл .OCX в c ++ или MFC. Если да, то каковы все шаги, которые необходимо выполнить. Если есть какой-либо пример кода, это было бы очень полезно

Ответы [ 3 ]

4 голосов
/ 30 мая 2011

Вы можете представить сборку .NET как COM-объект, используя инструмент regasm.exe . Вы можете использовать [ComVisible(true)], чтобы указать, что все классы должны быть видны COM-клиентам при регистрации. Этот атрибут уровня сборки также можно задать в свойствах проекта в Visual Studio. Вы также можете применить его только к некоторым классам, которые необходимо экспортировать. После того, как сборка зарегистрирована как COM-объект, вы можете создать экземпляр любого класса из неуправляемых клиентов, как с любым стандартным COM-объектом.

3 голосов
/ 30 мая 2011

В файле .ocx нет ничего особенного, это просто DLL. Microsoft придумала это расширение имени файла еще в версии Visual Basic 4 дня, чтобы сделать очевидным для программистов VB, что у них есть DLL, которая содержит элементы управления. Элементы управления ActiveX в отличие от элементов управления VBX с 16-битных дней.

Если вы сделали сборку .NET [ComVisible], то у вас уже есть COM-сервер, который можно использовать в других проектах. Если вы зарегистрировали его правильно, сборки .NET должны быть зарегистрированы в Regasm.exe вместо Regsvr32.exe. Совершается автоматически в .NET-проекте с помощью Project + Properties, вкладки Build, опции «Зарегистрироваться для взаимодействия COM». И во время установки с проектом установки и развертывания. Если вам нужна библиотека типов, используйте Regasm.exe с параметрами / tlb и / codebase. Или Tlbexp.exe

Если это действительно должен быть традиционный .ocx, другими словами, иметь элементы управления, тогда вы можете использовать Winforms UserControl или ваш собственный класс, полученный из элемента управления Winforms. Winforms автоматически реализуют систему соединений, чтобы классы, производные от класса Control, правильно выполнялись на хосте ActiveX.

0 голосов
/ 31 мая 2011

Если вы хотите использовать библиотеку .NET в обычном C ++, есть способы, в основном связанные с COM Interop.У Microsoft есть целый раздел MDSN, посвященный COM-взаимодействию: http://msdn.microsoft.com/en-us/library/6bw51z5z%28v=VS.71%29.aspx.

  1. Если .NET DLL поддерживает COM-взаимодействие, используйте это.
  2. Попробуйте использовать #import из VC ++директива для чтения .NET DLL в качестве COM-объекта.После компиляции VC ++ должен вывести файл .tlh и файл .thi (соответственно заголовок и реализацию), которые будут автоматически скомпилированы в ваш проект.Но это может работать, а может и не работать, в зависимости от конструкции DLL, зависимостей и т. Д.
  3. Посмотрите на создание собственной библиотеки-оболочки COM Interop .NET, которая маршализирует вызовы базовой библиотеки .NET DLL.
...