使用本机DLL从同一文件夹加载程序集

时间:2011-11-24 11:31:17

标签: .net c++ com interop .net-assembly

我有这个(本机)COM服务器,我们称之为 N.dll ,它从托管程序集调用一些API,让我们称之为 M.dll 。为了实现这一点,存在一个混合模式的DLL来互连两者;我们称之为 MM.dll 。三个DLL(N,M和MM)驻留在同一个DLL中,COM服务器显然是适当的注册。

我在MM.dll中使用带有using指令的M.dll程序集。

#using "M.dll"
using namespace M;

然后只是实例化并使用M中可用的类型。

现在,这个COM服务器可以由驻留在系统中任何位置的任何应用程序实例化。那显然可行。但是只要N需要从M调用API(通过MM),我就得到System.IO.FileNotFoundException(未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'M,版本= 1.0.0.0, Culture = neutral,PublicKeyToken = null'或其中一个依赖项。系统找不到指定的文件。)

如果我将M.dll程序集复制到可执行文件所在的同一文件夹,那么一切正常。但是,这不是一个解决方案,因为可能有很多应用程序使用COM服务器,我无法将M.dll部署到所有这些地方。出于同样的原因,我也无法对进程的配置文件做些什么。我需要一种方法来告诉混合模式MM.dll模块从它所在的同一文件夹加载托管程序集。

这可能吗?

1 个答案:

答案 0 :(得分:0)

请参阅有关Windows如何在msdn(http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx)上找到DLL的讨论。加载COM服务器时,必须通过Windows定位从属DLL。确保搜索算法将找到依赖DLL。