在同一应用程序池中的 64 位应用程序中使用 32 位 dll
Posted
技术标签:
【中文标题】在同一应用程序池中的 64 位应用程序中使用 32 位 dll【英文标题】:using 32bit dll in a 64bit applications in same application pool 【发布时间】:2018-10-31 00:12:05 【问题描述】:我有一个在 IIS 下运行的 64 位应用程序。它使用 64 位 DSN 连接到 SQL 服务器,但是我想使用 32 位 dll 作为外部库。
当我在应用程序池设置中启用 32 位应用程序时,我收到 DSN 的 architecture mismatch
错误,如果我禁用它,dll 将不再使用错误 ActiveX component can't create object
。
我应该如何在 64 位应用程序池中使用这个 32 位 dll?
【问题讨论】:
您不能在同一个进程中运行 32 位和 64 位 DLL(在本例中为 IIS 工作进程)。我建议您将较简单的一个封装在一个 Web 服务中,然后从另一个调用 Web 服务。 【参考方案1】:我有一个类似的设置;使用 32 位 dll 的 64 位 Web 应用程序。我看到的唯一区别是我不使用 DSN 连接到我的 SQL 服务器,而是使用如下连接字符串。
data source=YOURSERVER;initial catalog=YOURDATABASE;Persist Security Info=False;integrated security=True;MultipleActiveResultSets=True"
你能改变你的连接字符串吗?
编辑:
如果您必须使用 DSN,请通过 %windir%\SysWoW64\odbcad32.exe 的 32 位 ODBC 管理员检查是否存在 32 位版本。
【讨论】:
你开启了32位应用吗? 是的,和你解释的一样。 如果您启用了 32 位,那么这不是 64 位 Web 应用程序。您只能运行其中一个。 @Nick.McDermaid 你说得对,我说它是 64 位 windows 机器上的 web 应用程序更正确。以上是关于在同一应用程序池中的 64 位应用程序中使用 32 位 dll的主要内容,如果未能解决你的问题,请参考以下文章