Могу ли я использовать COleControlModule в приложении Windows Forms vb.net формы? - PullRequest
0 голосов
/ 11 июня 2019

Я обновляю приложение Windows Forms.Приложение использует активный файл x control (ocx).Мы получили OCX для компиляции и можем зарегистрировать его.Основным классом в проекте C ++ active x control является COleControlModule.Когда я иду, чтобы добавить элемент управления в приложение Windows Form, как это

Me.Controls.Add(Me.ActiveXClass)

, я получаю

Unable to cast COM object of type 'System.__ComObject' to class type 
'System.Windows.Forms.Control'. 

Я знаю, что активный класс x является объектом com, и я знаю, что этот COleControlModuleКласс не должен быть совместим с элементом управления Windows Forms.Могу ли я что-нибудь сделать, чтобы сделать эту работу?
Любая помощь очень ценится.

1 Ответ

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

Это не работает, потому что Runtime Callable Wrapper (RCW) не является элементом управления Windows Forms. Работают только элементы управления Windows Forms; чтобы использовать элемент управления ActiveX с формой, необходимо создать оболочку Windows Forms для элемента управления ActiveX. Это делается с помощью Aximp.exe , обычно путем добавления элемента управления на панель инструментов, как предложил Ханс, и перетаскивания экземпляра элемента управления в форму.

Шаги:

  1. Выберите «Выбрать элементы» либо из меню «Инструменты», либо щелкнув правой кнопкой мыши вкладку «Инструменты»
  2. Выберите вкладку COM-компоненты
  3. Выберите элемент управления ActiveX либо непосредственно из списка, либо с помощью кнопки «Обзор»
  4. В диалоговом окне «Инструменты» выберите добавленный компонент с помощью мыши и перетащите его на форму.

Ссылка на элемент управления ActiveX будет добавлена ​​в проект, как в этом примере с программой чтения Adobe PDF:

 <ItemGroup>
    <COMReference Include="AcroPDFLib">
      <Guid>{05BFD3F1-6319-4F30-B752-C7A22889BCC4}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="AxAcroPDFLib">
      <Guid>{05BFD3F1-6319-4F30-B752-C7A22889BCC4}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>aximp</WrapperTool>
      <Isolated>False</Isolated>
    </COMReference>
  </ItemGroup>

Обратите внимание, что есть две записи: одна для генерации Callable Wrapper во время выполнения (через tlbimp), а другая для генерации оболочки AxImp (через aximp). Они будут отображаться в Solution View под ссылками проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...