gpt4 book ai didi

c# - 如何将托管 C++ 库导入 C# 应用程序(目标 .net 版本 3.5)

转载 作者:行者123 更新时间:2023-11-30 04:03:34 25 4
gpt4 key购买 nike

我在 visual studio 中创建了一个托管的 c++ 库(包装器),它使用了一些非托管的 c++ 库。此包装将由使用 .net Framework 3.5 的 c# 应用程序使用。

在 C++ 中,我向链接器添加了额外的依赖项,并将外部库的 .lib 文件和 .h 文件复制到源文件所在的文件夹中。我设置 32 位平台并发布配置和构建解决方案。 DLL 已创建,因此我在 C# 应用程序的配置中引用了它。

当我在 c# 和 c++ 中使用例如 .net 4.5 时一切正常,但 c# 必须使用 3.5 版本。我读到我需要在较旧的 Visual Studio 中构建 C++ 库(我尝试过 2005 和 2008)。我设置了 V90 构建工具和 3.5 .net 版本并构建了 dll。

当我构建 C# 项目时没有显示任何错误,但是在运行之后我得到了这样的错误: HRESULT: 0x8007007E

我检查了我的库的依赖项,这就是结果(我在每个项目旁边都写了版本,其中一些是 4.0.0.0,一些是 2.0.0.0)。我苦苦挣扎了几个小时,现在我只是不知道如何让它工作..

Dependiences

最佳答案

异常类 FileNotFoundException 有点误导。但错误代码 (0x8007007E) 说明了更多信息。这是表示 Win32 错误代码的 COM 错误代码。

我们怎么知道呢?嗯,structure of COM error codes is described on MSDN . 8 表示错误,7 是设施,FACILITY_WIN32。因此,0x8007xxxx 形式的 COM 错误代码只是 Win32 错误代码。包装的 Win32 错误代码位于最低有效字中。这里是 0x007EERROR_MOD_NOT_FOUND .关联的文本是:

The specified module could not be found.

当系统尝试加载非托管 DLL 但找不到它时,就会发生该错误。托管程序集似乎依赖于某些非托管 DLL,并且至少找不到其中之一。通常这可能是:

  1. 无法找到托管程序集包装的主要非托管 DLL,或者,
  2. 无法找到非托管 DLL 所需的 MSVC 运行时。

您需要更深入地研究托管程序集的文档,才能找出问题所在。但希望这能为您指明正确的方向。我希望我已经为您提供了有关将来如何解码此类错误代码的指示。

关于c# - 如何将托管 C++ 库导入 C# 应用程序(目标 .net 版本 3.5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24364687/

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