Услуги 32-битных dll на 64-битной машине - PullRequest
1 голос
/ 08 сентября 2010

Я собрал и установил свой сервис с vs2010 на 64-битную машину.

Моя проблема возникает, когда моя служба ссылается на 32-разрядные библиотеки dll (точнее spssio32.dll) - в моем средстве просмотра событий появляется ошибка: "System.BadImageFormatException: была предпринята попытка загрузить программу с неверный формат. (Исключение из HRESULT: 0x8007000B) "

Любая помощь по этому вопросу будет принята.

С уважением, Байрон Кобб.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Код вашего сервиса написан на языке .NET?Если это так, вам нужно пометить его как таргетинг x86, а не Any CPU (через свойства проекта / цель сборки / платформы).

(по умолчанию код .NET предназначен для Any CPU, что означает, что на64-разрядные машины будут скомпилированы в машинный код x64. Поскольку такой 64-разрядный код не может загружать 32-разрядные библиотеки DLL, это может привести к сбоям, подобным тому, который вы видите. Где код зависит от 32-разрядногоDLL, она должна всегда компилироваться в 32-битный машинный код даже на 64-битных машинах, следовательно, для целевой платформы устанавливается значение x86.)

1 голос
/ 08 сентября 2010

Вы можете использовать суррогат COM

http://www.dnjonline.com/article.aspx?id=jun07_access3264

Другой вариант - создать внешний 32-битный серверный процесс и добавить интерфейс удаленного взаимодействия .NET и ваше 64-битное приложение, чтобы вы могли использовать удаленное взаимодействие .NET для взаимодействия между процессами.

...