使用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)
在initialize(SByte * fn)
是否可以使用VS设置,或者可以向C ++包装器引入一段代码,从而使包装器可以将包装的类库的位置标识给调用包装器的程序?是否可以在系统路径上找到包装的库?
我正在使用一个“框架”程序,该程序使用由C / C ++头文件中声明的函数定义的API从其他程序中调用库。基本上,我们试图从框架程序协调的一组更简单的子模型中构建一个复杂的数字模型。
一些子模型在托管代码中,我需要在它们周围放置包装器,以便框架可以调用它们。我找到了帮助here,并围绕一个非常简单的示例创建了一个测试-我将其称为“ MiniModel”,该示例在C#对象中实现了API的各个部分,然后通过“ MiniModelWrapper”将其提供给测试人员程序DLL。
我遇到的问题与question 21742777类似,并且按照那里建议的解决方案,我使用Process Monitor来了解程序在哪里寻找但没有找到我的库。我看到该程序浏览了路径中列出的几个目录,以找到我的包装器库,但仅在测试可执行文件所在的目录中以及包装的C#类库的(不存在)MiniModel子目录中。
将框架调用的所有库放在一个目录中是不切实际的。让包装器指向它们包装的库的位置似乎是一个实用的解决方案。我可以这样做吗?