【问题标题】:image analysis and 64bit OS图像分析和 64 位操作系统
【发布时间】:2011-01-29 18:09:47
【问题描述】:

我开发了一个使用 Congex 视觉库 (VPro) 的 C# 应用程序。我的应用程序是在具有 3GB RAM 的 32 位 Windows PC 上使用 Visual Studio 2008 Pro 开发的。

在应用程序启动期间,我看到分配了大量内存。到目前为止一切都很好,但是当我添加许多视觉细化时,内存分配会增加,并且部分应用程序(仅 Cognex OCX)会停止正常工作。应用程序的其余部分仍然可以工作(工作线程、套接字上的 com ......)

我尽我所能来节省内存,但是当分配的内存约为 700MB 时,我开始遇到问题。 Cognex 库文档中的注释说明 /LARGEADDRESSWARE 不受支持。无论如何,我正在考虑尝试在 win64 上迁移我的应用程序,但我该怎么办?

  • 我是否可以简单地使用 64 位处理器和 64 位 Windows 而不重新编译我的应用程序,该应用程序仍将是 32 位应用程序以利用 64 位?或者我应该重新编译我的应用程序?
  • 如果我不需要重新编译我的应用程序,我可以将它与 64 位 Congnex 库链接吗?
  • 如果我必须重新编译我的应用程序,是否可以交叉编译该应用程序以使我的开发套件位于 32 位 PC 上?

我们将不胜感激!

提前致谢

【问题讨论】:

    标签: visual-studio-2008 32bit-64bit


    【解决方案1】:

    您可以在 64 位操作系统上运行 32 位应用程序,但它们在“WoW”(Windows 上的 Windows)中运行。也就是说,它们仍然作为 32 位应用程序运行,具有 32 位应用程序的所有限制。要作为原生 64 位应用程序运行,它们必须是正确的 64 位应用程序。

    托管 (C#) 代码不是 32/64 平台特定的 - 它将被 JIT 编译成正确类型的代码,以便在主机 PC 上本地运行。但是,任何非托管代码(C++、大多数第三方 dll)都将被预编译为 32 位或 64 位,因此您必须为您的主机使用正确版本的 dll。

    如果您尝试在 64 位上运行您的程序但使用 32 位 dll,当您尝试调用该 dll 时,您的程序将简单地因“错误的图像格式”错误而崩溃。

    所以...要使您的程序真正实现 64 位,您需要构建一个链接到 64 位 Congnex 库的版本。

    您可以针对 Visual Studio 中的任何类型的处理器,因此您不需要使用 64 位 PC 来开发 64 位应用程序(尽管您需要使用 64 位 PC 来测试它!)

    【讨论】:

    • 感谢您的明确答复。所以现在最困难的一步是确定我必须在我的设备的 C++ 中重新编译该部分的架构。我想我必须将 Properties->Linker->Advaced->Targer Machine 设置为该架构之一。我有一个 Intel Core 2 Duo E6400,你知道什么是最好的选择吗? Prehaps "/MACHINEx64?
    • 是的,没错。如果您的目标是 32 位,请使用 /MACHINE:x86。对于 64 位 Intel/AMD,请使用 /MACHINE:x64。在按钮栏中有一个下拉列表(通常包含 Any CPU 或 Win32)。将其下拉并选择配置管理器,您可以为 x64 添加新配置(从调试或发布中复制它并为 64 位设置适当的链接器选项) - 然后您可以在 32/64 位构建之间切换通过在调试/发布之间切换时下拉该组合框。
    【解决方案2】:

    项目 + 属性、构建选项卡、平台目标。这应该设置为任何 CPU,默认值。当您在 64 位版本的 Windows 上运行代码时,它将自动使您的代码运行 64 位。 JIT 编译器会处理它。

    您必须在计算机上安装 .ocx 的 64 位版本才能使这项工作正常进行。

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2012-09-01
      相关资源
      最近更新 更多