【问题标题】:Could not load file or assembly C++ DLL from a .Net add-in无法从 .Net 加载项加载文件或程序集 C++ DLL
【发布时间】:2019-02-04 18:10:37
【问题描述】:

我有一个 .Net 加载项,其中我引用了我在 C++/CLI 中创建的 DLL。该 DLL 是针对 OpenCV API 设计的 - 所以现在我的 .Net 应用程序可以利用 OpenCV 提供的酷炫图形功能。

当我将加载项部署到其他计算机时会出现此问题。当用户执行专门调用我的 C++ DLL 的程序的一部分时,它会抱怨缺少引用:

我怀疑代码实际上并不知道 DLL 的位置,但在我的开发环境中(显然)一切正常,因为我的环境设置与您的标准构建 PC 不同。

我在这里缺少什么? 如何从 C# 加载项成功调用在 C++ 中创建的 DLL?请记住,加载项应该简化 Office 等软件的定制。这非常重要 - 我必须能够将非 .Net DLL 滚动到我的项目中,并且我的代码能够找到它们。

我的 dll 只是一个普通的 dll,而不是兼容 COM 的 dll(也许应该是?)或者我应该使用 __declspec(dllexport) 来装饰我的 C++ 代码 https://docs.microsoft.com/en-us/cpp/build/exporting-from-a-dll-using-declspec-dllexport?view=vs-2017

【问题讨论】:

  • 为什么请投反对票 - 如果你解释你的理由,也许我可以让这个问题变得更好。

标签: c# c++ dll deployment add-in


【解决方案1】:

所以两件事

  • 使用Dependancy Walker 来识别对您的 dll 的任何依赖关系以及它在“树”层次结构中进一步使用的 dll。我发现 2 个丢失了,如果没有这个有用的工具,这并不明显。不要被它给你的结果弄得不知所措,只要注意它抱怨的丢失的 dll。

  • 确保您的 dll 在您的项目中被引用,而不是在您构建它的其他文件夹中。

这解决了我的问题 - 通常只需确保您的 dll 与可执行文件位于同一路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多