gpt4 book ai didi

interop - C# - 混合程序集(C++/CLI、DirectX 原生)交互(32/64 位)

转载 作者:行者123 更新时间:2023-12-01 01:29:53 29 4
gpt4 key购买 nike

我有一个与 this question 有关的问题.两名球员:

  • C#应用程序
  • 1)
  • 使用的混合组件

    该应用程序必须支持从 Windows XP(32 位)到 Windows 7(32 和 64 位)的任何内容。组装以不同的方式复杂。它包含托管 C++/CLI 代码和一些与 native DirectX 共舞的 native C++ 类。它还链接到一些 32 位 native dll 的无源访问(包含带有导入库的 C++ 类)。

    事情在 32 位环境(XP 和 7 测试)中运行良好,包括 Windows 7 上的 32 位子系统。一旦在 64 位系统上使用“任何 CPU”以构建完整的解决方案,就会发生严重破坏。 32 位程序集不可用 - 但似乎仅在 Debug模式下(“无法加载,格式错误”等)。它似乎在发布中工作。对上述 32 位第三方 dll 的隐式依赖关系阻止了 64 位程序集构建。

    有没有办法提供能够使用程序集的真正 native 64 位应用程序?

    对装配的要求不是那么严格。它可以同时是 - 32 位或 64 位 - 但如上所述,应该可以从应用程序中以一种或另一种方式使用。

    最佳答案

    您在 64 位版本的 Windows 中遇到了严格的限制,64 位进程无法在进程内执行任何 32 位机器代码。当您使用 C++/CLI 并使用 DirectX 时,您肯定会依赖于机器代码。尽管听起来您不能在 64 位模式下执行,但 C++/CLI 和 DirectX 都可以在 64 位模式下编译/可用。

    这归结为构建和部署问题。您必须在 64 位模式下构建 C++/CLI 项目,并在 64 位操作系统上仅部署 64 位组件。主 EXE 必须构建到 AnyCPU。同样,在 32 位操作系统上,您必须仅构建和部署 32 位编译版本。您可以通过将 x64 配置添加到解决方案来解决构建问题,以便分别构建 32 位和 64 位版本。您可以通过创建两个安装程序来解决部署问题。

    由于无论如何您都必须支持 32 位操作系统,因此简单的解决方案是将 EXE 项目上的目标平台设置更改为 x86。现在一切都在 32 位模式下运行,您不必为构建和部署烦恼。您唯一错过的是 64 位版本中可用的更大的虚拟内存地址空间。

    关于interop - C# - 混合程序集(C++/CLI、DirectX 原生)交互(32/64 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5500095/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com