我有一个应用程序环境,它本质上是一个插件,其中:
主机应用程序调用非托管 c++ dll,后者调用托管 C++ dll,后者调用 C# dll
这是一种众所周知的方法,通过使用托管 C++ 的桥从非托管 C++ 调用 C#。在大多数情况下,这一切都很好,除了在我的 dll(非托管 C++、托管 C++ 和 C#)与调用 dll 的应用程序不在同一目录中的插件类型体系结构中。当应用程序调用非托管 C++ 时,一切都很好,因为应用程序知道要调用的目录以加载该 dll。但是,非托管 C++ 第一次调用托管 C++ 时,我们会收到 FileNotFoundException。事实证明,它没有找到 C# dll(注意所有三个 dll 都在同一个目录中,只是不在 app 目录中)。如果我将所有的 dll 放到 exe 的运行时目录中,那么一切正常,我们不会得到 FileNotFoundException。
所以,问题是当托管 C++ dll 加载时,如何在非托管 C++ 代码中以编程方式设置 C# dll 的加载目录?我已经尝试过 SetDllDirectory 并将系统上的路径变量设置为我的 dll 所在目录没有成功。