Подтвердить что ты не робот

Может ли x64-приложение использовать сборки x86 - и наоборот?

Мое приложение построено как приложение x64. После перехода на VS2010 я получил некоторые проблемы, которые, как представляется, связаны с некоторым несоответствием x64/x86 в ссылочных DLL. Теперь я перехожу к .NET4, и я получаю еще более аналогичные проблемы.

Мой вопрос: какие меры предосторожности необходимо принять в отношении смешивания x64 и x86. Можно ли это сделать вообще? Я думал, что x64-приложения должны иметь возможность использовать x86-dll без проблем. Нет? А как насчет другого пути? Может ли приложение x86 ссылаться на dll x64 - если оно выполняется на платформе x64? Каковы подводные камни, о которых я должен знать?

4b9b3361

Ответ 1

Нет, 64-разрядный процесс может загружать только 64-разрядные библиотеки DLL, а 32-разрядный процесс может загружать только 32-разрядные библиотеки DLL. Вероятно, вы думаете, что 64-разрядная операционная система может запускать 32-разрядные процессы.

Основная проблема с .NET заключается в том, что до VS2010 исполняемые проекты по умолчанию были "AnyCPU", что означает, что он будет загружаться в "родном" формате ОС, на котором он работает (поэтому 32-разрядная версия для 32-разрядных версий Windows и 64-разрядных для 64-разрядных версий Windows). Проблема в том, что если вы протестировали свое приложение на 32-битной Windows (скажем), тогда он может сломаться, если вы загрузите 32-разрядные библиотеки DLL и попытаетесь запустить в 64-разрядной Windows.

В VS2010 по умолчанию все исполняемые проекты по умолчанию "x86" (то есть 32-разрядные), которые (по большей части) смягчают проблему.

Ответ 2

Вы можете запускать приложения x86 в 64-разрядной ОС с использованием эмуляции WOW32. Некоторые подводные камни, с которыми я столкнулся - вы не можете смешивать и сопоставлять 32/64 в том же процессе. Поэтому, если вы собираетесь запускать IIS как 64, все сборки должны быть 64, иначе вам придется запускать в 32-битном режиме. 64 бит помогает некоторым приложениям больше других. Запуск SQL-версии 64-разрядной версии имеет несколько преимуществ по сравнению с 32-разрядной версией, самым большим преимуществом является то, что вы можете установить более 4 ГБ памяти на целевой сервер и что SQL сможет использовать более 4 ГБ памяти. Это не выгодно IIS, поскольку IIS обычно не может использовать более 3 ГБ памяти. Мой совет будет заключаться в том, чтобы убедиться, что ваш SQL-сервер/os/version - 64, если это возможно. Это не собирается делать. Огромное dfference, если другие серверы 64, но, как правило, легче работать и находить 32-битные версии.