c# - 我将如何使用 C++/CLI dll 将 native 代码与 C# 中的多个依赖库一起包装?

标签 c# c++ dependencies c++-cli

我想知道我将如何正确设置一个 C++/CLI 库来包装具有多个依赖项的 native c++ 代码。我已经尝试静态和动态地将 native 库链接到它的依赖库,但没有成功。

Managed C++/CLI dll 构建得很好,可以作为对 C# 项目的引用添加。但是,当我尝试使用任何已定义的类时,我会收到 BadImageFormatException 或 FileNotFoundException,具体取决于我的链接方式。我相信我需要在 CLI 库中指定依赖库,以便将其加载到 list 中,但我不确定该过程。也因为我知道它会出现,所以我已经验证所有涉及的库都构建在 x86 架构上。

最佳答案

我发现了问题,现在一切正常。这是几个不正确的事情同时发生的组合。

如果有人遇到同样的问题,我通过设置以下内容解决了它:

1) 被引用的 Boost 库(特别是 boost_thread)需要使用 BOOST_THREAD_USE_DLL 预处理器进行编译(其他 boost 库可能需要 BOOST_ALL_DYN_LINK 来动态链接所有内容)。这显然是一个常见问题。

2) 我验证了所有依赖项都在系统路径中(就像 R Ubben 重申的那样)

3) 我使用 DependencyWalker(来自 sourceforge 的 depends.exe)来分析我编译的托管 DLL。事实证明,正在使用的 libpq.lib 库实际上引用了不包含在 lib 文件夹中但包含在 bin 文件夹中的其他 DLL。因此需要将其添加到路径中。

4) 我的包装器的一部分使用了列表的#include header 。这迫使我的库链接到 2.0 框架依赖库。这与我的 4.0 客户端 objective-c # 应用程序不兼容。这只是通过编译时的警告解析才知道的(以前由于 C++ 生成太多而被隐藏……我知道这很愚蠢)。然而,这导致抛出 System.BadImageFormateException,尽管一切都针对相同的 x86 架构。

希望对遇到同样问题的其他人有所帮助。 BadImageFormateException 和 FileNotFoundException 完全过于模糊和无益。

关于c# - 我将如何使用 C++/CLI dll 将 native 代码与 C# 中的多个依赖库一起包装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3302306/

相关文章:

c# - 将 PEM 编码的 RSA 私钥转换为 AsymmetricKeyParameter

javascript - Angularjs $http 无法从 Asp.net webapi 4 获取数据

c# - 使用asp :Literal text in html attributes

c# - 使用通用方法获取我的枚举属性的 List<string>

C++ 数组从 512x512 转换为 16x16x32x32

c++ - 为什么模板允许具有非 constexpr 构造函数的 constexpr 函数成员?

c++ - 在 Windows 中通过管道进行视频流传输是否可行?

c++ - 静态初始化命令惨败

spring - 为什么 Maven 会下载不同版本的 Spring Artifact ?

javascript - D3 依赖轮未正确渲染