Я работаю над приложением C#, которое поддерживает два интерфейса связи, каждый из которых поддерживается собственной DLL. Каждая DLL содержит те же имена функций, но их реализация несколько меняется в зависимости от поддерживаемого интерфейса. Как правило, у пользователей обычно будет только одна DLL, установленная на их машине, а не обе. DLL для старого интерфейса импортируется так:Динамически загружать библиотеки DLL в Runtime
[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, если попытаться загрузить первый сбой. Есть ли изящный способ сделать это?
и waht вы бы сделали с полученной ручкой? GetProcAddress и что дальше? –
Ничего. Если бы я получил дескриптор, я бы выпустил его и позвонил через extern, который использует это имя DLL. Если нет, я бы попробовал со следующей DLL. –