Конвертировать 32-битную DLL в 64-битную DLL - PullRequest
10 голосов
/ 03 июня 2009

У меня 32-битная скомпилированная dll, когда я пытаюсь использовать ее в 64-битном приложении, она не загружается, Так что я хотел бы преобразовать dll в 64 бит. Работает нормально, когда платформа приложения меняется с «Любой процессор» или «x64» на «x86». Но я хочу использовать его под 64-битной, так как я собираюсь вызывать DLL из ASP-страниц.

Пожалуйста, помогите мне с этим.

Ответы [ 4 ]

10 голосов
/ 03 июня 2009

Windows НЕ МОЖЕТ загружать 32-битную DLL в 64-битный процесс - это ограничение, которое вы не можете обойти. Это означает, что если ваша 32-битная DLL-библиотека выполняет какие-либо операции P / Invoc для других 32-битных DLLS (или использует любые 32-битные .Net DLLS), вам не повезет (вам нужно будет запустить весь веб-сайт в 32-битной версии).

Вы не совсем понимаете, когда это работает, а когда нет. Вот объяснения:

  1. x86 - 32 бита - не может быть загружен в 64-битный процесс.
  2. x64 - 64-битная - не может быть выполнена на 32-битной машине.
  3. AnyCPU - dual - Может загружаться и выполняться в обеих средах.

В терминах AnyCPU:

  1. 64-битный процесс на 64-битной машине - DLL загружается как 64-битная.
  2. 32-битный процесс на 32-битной машине - DLL загружается как 32-битная.
  3. 32-битный процесс на 64-битной машине - DLL загружается как 32-битная.

В большинстве случаев можно оставить его как AnyCPU. Однако, как я уже сказал, если вы используете любые собственные или 32-битные DLL-библиотеки .Net, вам нужно будет сделать все ваше приложение 32-битным (и вы ничего не можете, или Microsoft не может с этим поделать).

2 голосов
/ 03 июня 2009
Флаг

x86 обычно устанавливается по причине, поэтому может быть плохой идеей изменить его. Но если вы абсолютно уверены, есть утилита, corflags.exe. У меня есть это в C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin. Конечно, это поможет только для сборок .net.

0 голосов
/ 31 августа 2012

вы можете взглянуть на http://msdn.microsoft.com/en-us/library/ms164699%28VS.80%29.aspx

0 голосов
/ 03 июня 2009

Если вы хотите загрузить чистую C # DLL в 32- и 64-битном процессе, то правильный выбор - AnyCPU. Это скомпилирует библиотеку DLL как независимую от процессора, и она будет загружаться в любой тип процесса.

Я не уверен на 100%, что ты об этом спрашиваешь. Если нет, можете ли вы уточнить свой вопрос?

...