Динамическое подключение сишных dll в приложении c#
Формулировка задачи:
Здравствуйте коллеги. Столкнулся вот с какой проблемой:есть у меня приложение .net, в котором я подключаю стороннюю dll написанную на си; все бы ничего да вот только этих dll два (один для 32разрядной системы, а второй для 64) и в зависимости от того, какая ОС я должен подключать соответствующую. Особенность кода .net не позволяет юзать методы из указанных импортов функций этих dll, т.к. методов там много и вызывать соответствующий проверяя в каждом вызове разрядность ОС крайне печально. Хотелось бы сделать что то типа условной типизации экземпляра объекта из двух разных классов для этих двух dll. Т.е. Выглядело бы это следующим образом: при запуске приложение определяет разрядность ОС (дабы в .net это сделать легко) далее исходя из условия создаю экземпляр необходимого класса с методами от подходящей для данной ОС dll, после чего уже юзаю методы из этого класса по мере необходимости.
Что посоветуете?
Решение задачи: «Динамическое подключение сишных dll в приложении c#»
textual
Листинг программы
public interface IMyDllWrapper
{
int Function();
};
public class MyDllWrapper32 : IMyDllWrapper
{
[DllImport("Dll_x86.dll", EntryPoint = "Function_x86")]
static extern int Function_x86();
public int Function() { return Function_x86(); }
}
public class MyDllWrapper64 : IMyDllWrapper
{
[DllImport("Dll_x64.dll", EntryPoint = "Function_x64")]
static extern int Function_x64();
public int Function() { return Function_x64(); }
}
public static class MyDllWrapper
{
public static IMyDllWrapper CreateDllWrapper()
{
if (IntPtr.Size == 8)
return new MyDllWrapper64();
return new MyDllWrapper32();
}
}