在同一应用程序池中的 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的主要内容,如果未能解决你的问题,请参考以下文章

招商银行支付dll在64位windows系统下的注册使用问题

Wix 64 位应用程序中的 32 位 COM

使用 C++ 从 32 位进程访问 64 位 dll

如何检查给定地址是 32 位还是 64 位?

如何测量 32 位程序中 64 位进程的内存使用情况?

win7-64位,vs32位,odbc 连接oracle问题总结