Загрузите неуправляемую DLL в конструкторе, чтобы загрузить элементы управления в оболочке

Есть ли способ загрузить неуправляемую dll во время разработки в Visual Studio?

Я знаю, что всегда могу поместить DLL в папку «System32» или добавить путь к Dll в переменную «PATH», чтобы загрузить ее напрямую. Но я не хочу этого делать. Я хочу загрузить его из ExecutablePath приложения. DLL фактически содержит элемент управления.

Может ли кто-нибудь помочь мне в этой ситуации??


Спасибо, WritZ


person Writwick    schedule 15.08.2012    source источник
comment
Возможно, вам придется вызвать его из пути к исполняемому файлу и создать конструктор самостоятельно. Дизайнер VS просто создает файл .designer.cs, который вы также можете написать вручную.   -  person HenryZhang    schedule 15.08.2012
comment
Я хочу использовать Конструктор VS! Поэтому я и спрашиваю, есть ли другой способ сделать это! Или я бы просто использовал шаблон пустого приложения, а не проект Windows Forms! И если я попытаюсь отредактировать файл *.designer.cs, то я думаю, что vs перезапишет его, так как у меня уже были такие проблемы раньше!   -  person Writwick    schedule 15.08.2012
comment
Я не имел в виду перезапись файла *.designer.cs, но вместо этого файл конструктора просто создает файл частичного класса, который вы можете поместить в другой файл. Неуправляемый код вызывается во время выполнения, поэтому дизайнер не может его увидеть/использовать, так как он не может быть сгенерирован в конструкторе VS. Это та же самая причина, по которой библиотеки DLL могут быть заменены без перекомпиляции приложения.   -  person HenryZhang    schedule 15.08.2012
comment
Да, я знаю, что файл конструктора содержит разделяемый класс формы. Да, неуправляемый код вызывается во время выполнения, но когда я добавляю элемент управления [содержащийся в dll [обернутый в другую .net dll]] в дизайнере, он просто не работает и показывает окно сообщения об ошибке! Итак, я спрашиваю, есть ли способ предварительно загрузить dll в дизайнере из пути к приложению! [Я не собираюсь сам вручную переписывать дизайнер для этой небольшой работы!]   -  person Writwick    schedule 15.08.2012


Ответы (1)


Я хочу загрузить его из ExecutablePath приложения

Это не может работать, его еще нет. За исключением того, что Windows никогда туда не смотрит, дизайнер гарантированно потерпит неудачу, когда вы зарегистрируетесь из системы управления версиями или очистите проект.

Этот код выполняется в контексте Visual Studio, поэтому правила поиска Windows DLL основаны на месте его установки. Неясно, является ли это ошибкой кода pinvoke или ваша сборка имеет неявную зависимость от DLL. Вы можете что-то сделать с pinvoke, вы можете предотвратить запуск кода, проверив свойство DesignMode. Единственный способ справиться с неявной зависимостью — помочь Windows найти DLL. Каталог на пути поиска. Единственный путь вперед — разделить код на части, которые действительно важны только в режиме разработки, чтобы режим DesignMode снова стал полезным.

person Hans Passant    schedule 15.08.2012