在ASP.NET中使用32位Delphi dll?

时间:2011-04-19 15:11:52

标签: asp.net delphi dllimport

首先,当我进行测试时,它在Visual Studio 2010中运行良好。

但我尝试使用以下4个版本在64位Windows 7上发布到IIS7,但仍然无效:

1.Visual Studio 2010 Publish - >构建 - >一般 - >平台目标:任何CPU

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. 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在32位进程中运行ASP.NET ...但它似乎不起作用,我想知道我做错了什么...

    提前致谢...

1 个答案:

答案 0 :(得分:2)

似乎正在发生的事情是,当您切换到32位时,您无法找到某些其他依赖项的32位版本。它似乎找到了其他依赖项的64位版本。

如果您可以安排所有的DLL和程序集都是32位,那么您尝试的应该可以正常工作。

另一种选择是使用FreePascal构建64位DLL。如果接口是普通的旧函数,这可能会起作用,但我不确定FreePascal是否可以执行COM。

另一种方法是避免Delphi altogther并使用支持64位的工具,例如Visual Studio。