Динамическое подключение сишных dll в приложении c#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте коллеги. Столкнулся вот с какой проблемой:есть у меня приложение .net, в котором я подключаю стороннюю dll написанную на си; все бы ничего да вот только этих dll два (один для 32разрядной системы, а второй для 64) и в зависимости от того, какая ОС я должен подключать соответствующую. Особенность кода .net не позволяет юзать методы из указанных импортов функций этих dll, т.к. методов там много и вызывать соответствующий проверяя в каждом вызове разрядность ОС крайне печально. Хотелось бы сделать что то типа условной типизации экземпляра объекта из двух разных классов для этих двух dll. Т.е. Выглядело бы это следующим образом: при запуске приложение определяет разрядность ОС (дабы в .net это сделать легко) далее исходя из условия создаю экземпляр необходимого класса с методами от подходящей для данной ОС dll, после чего уже юзаю методы из этого класса по мере необходимости. Что посоветуете?

Решение задачи: «Динамическое подключение сишных dll в приложении c#»

textual
Листинг программы
  1. public interface IMyDllWrapper
  2. {
  3.     int Function();
  4. };
  5.  
  6. public class MyDllWrapper32 : IMyDllWrapper
  7. {
  8.     [DllImport("Dll_x86.dll", EntryPoint = "Function_x86")]
  9.     static extern int Function_x86();
  10.  
  11.     public int Function() { return Function_x86(); }
  12. }
  13.  
  14. public class MyDllWrapper64 : IMyDllWrapper
  15. {
  16.     [DllImport("Dll_x64.dll", EntryPoint = "Function_x64")]
  17.     static extern int Function_x64();
  18.  
  19.     public int Function() { return Function_x64(); }
  20. }
  21.  
  22. public static class MyDllWrapper
  23. {
  24.     public static IMyDllWrapper CreateDllWrapper()
  25.     {
  26.         if (IntPtr.Size == 8)
  27.             return new MyDllWrapper64();
  28.         return new MyDllWrapper32();
  29.     }
  30. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы