ADN Open CIS
Сообщество программистов Autodesk в СНГ

12/08/2013

Использование 64-битного ActiveX компонента из .NET сборки

Вопрос:

Я использовал  утилиты ADN (ADN utilities), которые включают несколько ActiveX компонентов. Теперь я портирую мой проект на 64-разрядную Windows и скачал 64-разрядные версии этих компонентов, однако я не могу поместить их на мою форму в Visual Studio.

Ответ:

Visual Studio  - 32-разрядное приложение даже на 64-разрядной операционной системе, и она не поддерживает 64-разрядные ActiveX компоненты в Дизайнере форм (Form Designer). Но вы можете создать компонент программно в вашем коде.

В следующем примере я добавлю компонент AcadColor.ocx к моей .NET форме.

Первое что нам понадобится – это создать обертку для ActiveX компонента. Я запускаю Visual Studio 2008 x64 Win64 Command Prompt, перехожу в каталог с компонентом и напускаю на него aximp.exe: Примечание: в Vista/Windows 7 нужно запускать утилиты командной строки с соответствующими правами – нажмите правую кнопку мыши на ярлыке командной строки и выберите Запуск от имени… (Run as administrator)


 

Если вы увидите сообщение об ошибке AxImp Error: Did not find a registered ActiveX control in ..., тогда сначала зарегистрируйте компонент в этой же командной строке с использованием regsvr32 AcadColor.ocx.

Теперь мы можем сослаться на 2 созданных dll из проекта (AutoCADColor.dll и AxAutoCADColor.dll) а затем добавьте следующий код в конструктор формы:

Код - C#: [Выделить]
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace TestActiveX
  5. {
  6.   public partial class Form1 : Form
  7.   {
  8.     private AxAutoCADColor.AxAcadColor acadColor;
  9.  
  10.     public Form1()
  11.     {
  12.       InitializeComponent();
  13.  
  14.       acadColor = new AxAutoCADColor.AxAcadColor();
  15.       acadColor.Location = new System.Drawing.Point(7, 7);
  16.       acadColor.Size = new System.Drawing.Size(150, 20);
  17.       acadColor.Visible = true;
  18.       this.Controls.Add(acadColor);
  19.     }
  20.   }
  21. }

 

Скомпилируйте проект как Any CPU или x64 и запустите его:

 

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/use-64-bit-activex-component-from-a-net-assembly.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=174

Опубликовано 12.08.2013
Отредактировано 19.08.2013 в 14:39:08