Используя 32-битную Delphi DLL в ASP.NET? - PullRequest
0 голосов
/ 19 апреля 2011

Во-первых, он отлично работает в Visual Studio 2010, когда я выполняю тестирование.

Но я попытался 4 из следующих, чтобы опубликовать в IIS7 на 64-битных Windows 7, но все еще не работает:

1.Визуальная студия 2010 Публикация -> Сборка -> Общие -> Цель платформы: Любой ЦП

1-A: IIS7: ASP.Net v4.0, Включить 32-разрядное приложение = False

Error:
Server Error in '/TestDll' Application.
--------------------------------------------------------------------------------

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) 

1-B: IIS7: ASP.Net v4.0, Включить 32-разрядное приложение = True

Он даже не загружается вообще, «Internet Explorer не может отобразить веб-страницу» иЖурнал приложения получил ошибку приложения ....

  1. Публикация в Visual Studio 2010 -> Сборка -> Общие -> Цель платформы: x86

2-A: IIS7: ASP.Net v4.0, Включить 32-разрядное приложение = False

Could not load file or assembly 'WebApplicationTest' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

Трассировка загрузки сборки: следующая информация может быть полезна для определения, почему не удалось загрузить сборку 'WebApplicationTest'.

=== Pre-bind state information ===
LOG: User = IIS APPPOOL\ASP.NET v4.0
LOG: DisplayName = WebApplicationTest
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: WebApplicationTest | Domain ID: 7
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/inetpub/wwwroot/TestDll/
LOG: Initial PrivatePath = C:\inetpub\wwwroot\TestDll\bin
Calling assembly : (Unknown).

2-B: IIS7: ASP.Net v4.0, Включить 32-разрядное приложение = True

Больше не загружается.

хм ... из того, что я исследую, является то, что единственный способ - заставить IIS7 запустить ASP.NET в 32-битном процессе ... но это не работает, интересно, что я сделал не так ...

Заранее спасибо ...

1 Ответ

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

Похоже, что происходит, когда вы переключаетесь на 32-битную версию, вы не можете найти 32-битную версию некоторых других зависимостей.Похоже, что он находит 64-битные версии этих других зависимостей.

Если вы можете сделать так, чтобы все ваши библиотеки DLL и сборки были 32-битными, то, что вы пытаетесь, должно работать.

Другой вариант -использовать FreePascal для создания 64-битной DLL.Это может сработать, если интерфейс представляет собой простые старые функции, но я не уверен, что FreePascal может выполнять COM.

Еще одним способом было бы избежать Delphi altogther и использовать инструменты, которые поддерживают 64-битные, например Visual Studio.

...