Динамическое подключение сишных 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д