К сожалению, вы столкнулись с «ошибкой по замыслу» в VS (или, другими словами, с «функцией»).
Ваше подозрение, что проблема заключается вдизайнер Visual Studio, которому нужно знать, где находится собственная DLL, имеет право частично вправо.Дело не в незнании его местоположения, а в том, что конструктор не может отразить сборки со смешанным режимом (те, которые содержат как управляемый, так и собственный код) для создания экземпляра элемента управления.Это приводит к тому, что на панели инструментов отображается ошибка, которую вы заметили.
Обходной путь - скомпилировать исходные файлы C ++, используя /clr:pure
, для создания чисто управляемого EXE-файла.
Другая возможность (также «ошибка по замыслу» в VS) заключается в том, что элемент управления, который вы пытаетесь добавить, был скомпилирован как 64-разрядный компонент.Поскольку Visual Studio является 32-разрядным процессом, он может выполнять только 32-разрядные модули.Хотя он позволяет вам добавить ссылку на 64-битную сборку, он на самом деле не может JIT скомпилировать эту 64-битную сборку и выполнить ее в процессе.
Обходной путь здесь заключается в компиляции вашей сборки пользовательского элемента управления, используя "AnyCPU ", которая заставит его выполняться как 32-разрядный процесс в 32-разрядной среде и как 64-разрядный процесс в 64-разрядной среде.На самом деле, это лучшее из обоих миров, если вы правильно написали свой код.
Наконец, если ничего из этого не работает, всегда есть возможность обойти конструктор,Вы по-прежнему можете написать код, необходимый для создания экземпляра пользовательского элемента управления и установить его свойства в инициализаторе формы.Все, что вы потеряете, - это возможность использовать элемент управления внутри дизайнера в Visual Studio.Все будет работать как положено во время выполнения.