我正在研究支持两个通信接口的C#应用程序,每个通信接口都支持它自己的DLL。每个DLL包含相同的函数名称,但其实现取决于支持的接口略有不同。实际上,用户通常只在他们的机器上安装一个DLL,而不是两者。旧接口的DLL是这样导入的:在运行时动态加载DLL
[DllImport("myOldDll.dll",
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
public static extern int MyFunc1(void);
public static extern int MyFunc2(void);
public static extern int MyFunc3(void);
这是试图引入任一DLL的有效方法吗?
[DllImport("myOldDll.dll",
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
[DllImport("myNewDll.dll",
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
public static extern int MyFunc1(void);
public static extern int MyFunc2(void);
public static extern int MyFunc3(void);
理想情况下,我想这将是很好的检测缺少DLL,如果先装入尝试失败加载DLL第二。有没有一种优雅的方式来做到这一点?
然后你会使用获得的句柄吗? GetProcAddress和下一步是什么? – 2010-09-09 19:53:30
什么都没有。如果我得到了句柄,我会释放它并通过使用该DLL名称的extern进行调用。如果没有,我会尝试下一个DLL。 – 2010-09-09 19:58:57