Динамическое подключение сишных 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();
    }
}

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


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

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

10   голосов , оценка 4.2 из 5
Похожие ответы