【问题标题】:Initializing 64-bit Com C++ dll in a c# project在 c# 项目中初始化 64 位 Com C++ dll
【发布时间】:2013-01-16 15:31:40
【问题描述】:

我在一个 c# 类库项目中引用了一个 64 位 com interop dll 并有初始化它的代码,这个库用于 asp.net 项目。

由于业务层项目和 asp.net 在 c# 中,我已配置为适用于任何 CPU 平台。我也设置了

现在,当我尝试在业务层项目中初始化 com 类时,出现以下错误。任何建议这个错误是什么以及为什么它提到无效的 Win32 应用程序,因为我已经将它覆盖到 64 位。

由于以下错误,从 IClassFactory 创建 CLSID 为 {31DE5D69-1F5F-434D-8855-F627EAEB2404} 的 COM 组件实例失败:800700c1 不是有效的 Win32 应用程序。 (HRESULT 异常:0x800700C1)。

谢谢

【问题讨论】:

    标签: asp.net com 64-bit


    【解决方案1】:

    无法从 x86 进程引用 x64 COM 库。如果您将配置设置为“任何 CPU”,则字长在应用程序初始化期间终止,这意味着如果您在 x86 系统上启动应用程序将导致使用无法引用 x64 库的 x86 配置。

    您需要创建一个 x64 库才能使用基于 x64 的 COM 服务器。在您的 IIS 配置中,应用程序池还需要使用 x64。但是,您应该避免在您的项目中使用“任何 CPU”,请参阅 this article

    【讨论】:

    • 我正在将我的应用程序转换为仅在 64 位机器上工作,但我不得不使用“任何 CPU”来构建 c# 项目,因为 asp.net 没有选择平台作为 x64 的选项,因此给出了 64 位 dll 引用的错误。我还使用了应用程序池设置 Enable 32-Bit Application property as set is as false。
    【解决方案2】:

    我必须在 Visual Studio 2012 的 64 位命令提示符中注册 dll,这将 dll 正确注册为 64 位,我能够在 c# 项目中使用它。

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 2011-05-26
      • 2012-02-04
      • 2013-11-02
      • 2012-10-15
      • 2012-05-28
      • 2011-09-28
      • 2015-01-07
      • 1970-01-01
      相关资源
      最近更新 更多