Запуск диалогового окна C # из неуправляемой библиотеки DLL C ++ mfc active x

StackOverflow https://stackoverflow.com/questions/606270

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне сказали написать диалоговое окно на C #, которое должно быть создано из неуправляемой библиотеки DLL c ++.Мы делаем это в других местах нашего кода, просто добавляя управляемый класс c ++ в проект C ++, затем вызывая C # dll из управляемого класса c ++.Однако я нахожу, что это не работает для меня с того места, где я должен это делать.Я думаю, потому, что c ++ dll - это проект MFCActiveX.Как только я установлю clr для любого файла в этом проекте, он больше не будет регистрироваться корректно.Когда я пытаюсь зарегистрировать его, я получаю три ошибки, затем сообщение о том, что он зарегистрирован.Однако, когда я пытаюсь его использовать, я получаю ошибку 0x80040111 "ClassFactory не может предоставить запрошенный класс".Если у кого-нибудь есть какие-либо идеи, в чем здесь проблема, я был бы очень признателен.Мне либо нужно быть в состоянии выполнить это (предпочтительно), либо доказать, что это невозможно.

Спасибо

Это было полезно?

Решение

Я не понимаю, как проект MFCActiveX может помешать вам создать класс C # таким образом.Если только это просто не позволяет добавить управляемый класс.

Если вы не можете заставить работать трюк с управляемым классом C ++, другой вариант - использовать COM.Можно зарегистрировать своего рода фабрику в проекте C # как COM-объект.Скажем, дайте ему следующий интерфейс

[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
  void Create(); 
}

Вам также придется создать вспомогательный класс.Но тогда вы могли бы зарегистрировать управляемую сборку и использовать COM для доступа к ней.

Другие советы

Теперь вы должны зарегистрировать его с помощью "regasm" вместо "regsvr32".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top