我有一个应用程序环境,基本上是在一个插件:托管C DLL调用C#DLL,FileNotFoundException异常
主机应用程序调用非托管C++ DLL它调用到托管C++ DLL它要求为C#DLL
这是通过使用托管C++桥接从非托管C++调用到C#的一种相当已知的方式。在大多数情况下,除非插件式体系结构中的dll(非托管C++,托管C++和C#)与调用dll的应用程序不在同一目录中,否则这一切都可以正常工作。当应用程序调用非托管C++时,一切都很好,因为应用程序知道要调用的目录来加载该dll。然而,第一次非托管C++调用托管C++时,我们得到了FileNotFoundException。事实证明,它没有找到C#的DLL(注意,所有三个DLL都在同一个目录中,而不是在应用程序目录中)。如果我将所有的DLL放入exe的运行时目录中,那么一切正常,我们不会得到FileNotFoundException。但是当我部署时,我将无法控制调用应用程序,因此无法将我的dll删除到运行时目录中。
所以,问题是如何在托管C++ dll加载时以非托管C++代码以编程方式为C#dll设置加载目录?我已经尝试了SetDllDirectory并在系统上设置路径变量,以使我的dll所在的目录没有成功。
你能发表一些代码吗?你使用的API是什么引发异常? – 2013-02-23 04:09:51