#c_sharp #net #clr
Недавно сделал для себя открытие - при сборке .NET-приложения я могу выбрать разрядность целевой платформы. Полез читать в интернеты, и все, что я понял - так это то, что ничего я не понял. Сам я java-ист. С детства думал, что не важно, для чего собирать, важно, какой разрядности jvm. Но тут, видимо, все иначе... Прошу помочь с такой проблемой: Нужно собрать приложение, которое использует стороннюю c++ библиотеку. Для библиотеки доступны 32 и 64-битные .dll-ки. От приложения не требуется сверхпроизводительности, так что и 32-битная версия меня устроит. Могу ли я собрать свой проект как 32-битный с использованием лишь 32-битной .dll и рассчитывать на то, что все это дело будет работать как в 32-битной, так и в 64-битной системе? И если нет, то как лучше сделать? И пара второстепенных вопросов, которые помогут мне понять, что я делаю: Собранное для 64-битной системы .NET приложение ведь будет невозможно запустить в 32-битной системе, или же это работает слегка иначе, чем с нативными приложениями? Верно ли я понимаю, что приложения, собранные для систем разной разрядности, запускаются на разных виртуальных машинах, и, как следствие, на 64-битной версии windows установлены виртуальные машины CLR двух разрядностей?
Ответы
Ответ 1
Все именно так как и кажется: 32х-разрядная версия будет работать почти' где угодно, 64х-разрядная потребует 64х-разрядную систему. Однако, если у вас есть обе версии чужой библиотеки - то лучше оставить свою сборку не привязанной к разрядности (AnyCPU), а при загрузке библиотеки загружать ту, которая соответствует разрядности текущего процесса. Подробности - вот тут: Подгрузка разных dll в зависимости от разрядности системы ' 32х-разрядная версия не будет работать на 64х-разрядной системе без поддержки 32х-разрядных приложений, например такое возможно на Windows Server Core (спасибо PetSerAl за уточнение)
Комментариев нет:
Отправить комментарий