c# - Any CPU dependent on C++/CLI dependent on native C dll (any cpu for c++/cli)

标签 c# c c++-cli 64-bit x86

这是我的问题。 我正在用 C# 包装一个 C dll。为此,我首先编写了一个 C++/CLI 包装器。 native C 库链接到 C++/CLI 包装器。 (C++/cli 项目中的链接器属性)。

现在是这样组织的: - native C .lib:x86 和 64 位。

  • 1 个包含 2 个项目的解决方案:
    • 链接到原生 C .lib 的 C++/CLI 包装器项目
    • C# 项目引用 C++/CLI 项目

我的问题是我需要 C# 来定位“任何 CPU”。但此选项在 C++/CLI 中不可用,因为它直接编译为 native 代码。

我的解决方案是: - 在 x86 中编译 C++/CLI 包装器,然后更改配置并编译为 64 位。编译时,我想告诉它根据平台采用哪个 dll。即:如果以 64 位编译,则链接 64 位 native C dll,否则如果是 x86,则链接 x86 native C。 - 完成后,我应该能够在我的 C# 平台中拥有任何 CPU 目标。同样,我不会引用我的 C++/CLI 包装器项目,而是根据目标平台引用所需的 dll。

我的问题是:

  • 如何根据目标平台告诉 C++/CLI 项目链接到哪个 .lib?
  • 如何告诉 C# 项目根据目标平台引用哪个 C++/CLI dll?

让我补充一点,C# 项目是一个类库,供 x86 或 x64 客户端使用。

我希望我的问题足够清楚。任何帮助将不胜感激!

更新 基于:Conditional references in .NET project, possible to get rid of warning? ...

现在我已经编辑了我的 .csproj 文件,使用一个条件来引用 dll,如下所示:

<ItemGroup>
    <Reference Include="AlibCppWrapper, Version=1.0.4303.21410, Culture=neutral, PublicKeyToken=c0c17a53adc44091, processorArchitecture=AMD64"
               Condition="$(Platform) == 'x64'">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\x64\Debug\AlibCppWrapper.dll</HintPath>
    </Reference>
    <Reference Include="AlibCppWrapper, Version=1.0.4303.21410, Culture=neutral, PublicKeyToken=c0c17a53adc44091, processorArchitecture=x86"
               Condition="$(Platform) == 'x86'">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\Debug\AlibCppWrapper.dll</HintPath>
    </Reference>
  </ItemGroup>

不幸的是,这不起作用,因为 $(Platform) 设置为 AnyCPU...

最佳答案

您所描述的被称为“并行程序集”(同一程序集的两个版本,一个 32 位和另一个 64 位)...我认为您会发现这些有帮助:

编辑 - 根据评论:

在这里您可以找到完全适合您的场景的演练:.NET DLL wrapping C++/CLI DLL referencing a native DLL

关于c# - Any CPU dependent on C++/CLI dependent on native C dll (any cpu for c++/cli),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7727876/

相关文章:

c# - C# 中使用 System.Threading.Timer 的延迟队列

c# - 如何使用 SQL CE 加速 LINQ 插入?

c - C99 采用缓慢

c - 获取c中从一点到行尾的输入子字符串

c# - SQL 数据库 VS。多个平面文件(数以千计的小型 CSV)

c# - 在 C# - C++/CLI - C++ Windows 窗体应用程序退出之前跟踪 - 并正确结束 - native 和托管线程

c# - Blob 检测中的大位图图像内存分配,C# .Net

c# - POCO 和 'Value Object' 之间的唯一区别是 POCO 目标 .Net 吗?

c - C中二维卷积的实现

c# - C++/CLI 全局函数可访问性问题