首页 > 解决方案 > C++-CLI:包装器可以指定在哪里寻找它包装的库吗?

问题描述

使用 CLI,我用 C++ DLL 包装了一个 C# 类库,以便可以从非托管代码访问 C#。我已将 C# 类库作为 C++ DLL 的 VisualStudio 项目的参考包含在内,并且我可以运行一个小测试程序,该程序通过 C++ DLL 从我的 C# 类中调用方法。但是,如果 C# 类库与调用包装器的 .exe 不在同一目录中,则测试将失败并显示以下消息。

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“MiniModel,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。

在 MiniModelWrapper.MM_Interface.initialize(SByte* A_0)

初始化时(SByte* fn)

我的问题:

是否有我可以使用的 VS 设置,或者我可以将一段代码引入 C++ 包装器,这将允许包装器将包装的类库的位置识别给调用包装器的程序?是否可以在系统路径上找到包装的库?

背景:

我正在使用一个“框架”程序,该程序使用由 C/C++ 头文件中声明的函数定义的 API 从其他程序调用库。基本上,我们试图从框架程序协调的一组更简单的子模型中创建一个复杂的数值模型。

一些子模型在托管代码中,我需要在它们周围放置包装器,以便框架可以调用它们。我在这里找到了帮助,并围绕一个非常简单的示例创建了一个测试——我称之为“MiniModel”——它在 C# 对象中实现部分 API,然后通过“MiniModelWrapper”DLL 使测试程序可以访问它们。

我遇到的问题与问题 21742777类似,并且作为那里推荐的解决方案,我使用 Process Monitor 来了解程序在哪里寻找但没有找到我的库。我看到该程序查看了路径中列出的几个目录以找到我的包装器库,但仅在测试可执行文件所在的目录和包装的 C# 类库的(不存在的)MiniModel 子目录中。

将框架调用的所有库放在一个目录中是不切实际的。让包装器指向它们包装的库的位置似乎是一个实用的解决方案。我可以这样做吗?

标签: visual-studioc++-cli

解决方案


推荐阅读