Загрузка Corflags: 16 dll в x86 приложение падает на 64-битной системе - PullRequest
1 голос
/ 28 апреля 2011

Я использую внешнюю DLL в своем проекте.Когда я пытаюсь запустить приложение на 64-битной машине, оно вылетает с FileLoadException.Так как он работает нормально на 32-битной системе, я подозреваю, что DLL будет 32-битной.Однако установка целевой платформы проекта на x68 не помогает.

Я прочитал 32-битную DLL в 64-битном приложении в c # и Загрузка 32-битной библиотеки DLL в 64-битное приложение и на некоторых других страницах, которые говорят, что я должен собрать все приложение как 32-битноепроцесс (который не будет беспокоить меня - он должен быть просто исполняемым на 64-битных окнах), но я не знаю, как создать 32-битное приложение на 64-битной машине разработчика, если не установив целевую платформу ...

Код всего лишь

static void Main(string[] args)
{
    var mf = new QuickFix43.MessageFactory();
    Console.WriteLine("running");
    Console.ReadKey();
}

, а материал QuickFix взят из DLL.

Редактировать: Я проверил DLL с помощью CorFlags и вычислил

CLR Header: 2.5
PE        : PE32
CorFlags  : 16

, что означает, что dll является сборкой смешанного режима, которая может быть загружена только в среде i386 (http://blogs.msdn.com/b/slessard/archive/2010/04/09/types-of-managed-code-assemblies.aspx)

Возможно ли загрузить ее в 64-битнойокружающая среда

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Вы также можете запускать 32-битные приложения в 64-битной среде. Но если вы хотите загрузить 32-битную DLL, вы должны построить свое приложение как 32-битное. Вы можете сделать это, установив целевую платформу на x86 в режимах «Отладка» и «Выпуск». Это должно решить вашу проблему.

0 голосов
/ 29 апреля 2011

ОК, вот и ответ.Проблема была на самом деле не в том, что мой проект не смог загрузить родную dll.Проблема была в том, что мой проект вызывает управляемую dll, которая вызывает родную dll, о которой идет речь.Целевая платформа моего проекта была установлена ​​на x68, но управляемая dll была скомпилирована как «любой процессор».Перекомпиляция промежуточного управляемого dll с x68 сработала.

...