我正在研究支持兩個通信接口的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