Создание экспортируемых функций в dll

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Создание экспортируемых функций в dll

Сообщение Qwertiy » 17.01.2013 (Чт) 0:07

В .NET всё-таки есть способ создания экспортируемых функций.

  1. функция должна быть статической. Надо поставить аттрибут для её экспорта:
    Код: Выделить всё
    Imports System.Runtime.InteropServices

    Public Module Exported

    <System.Reflection.Obfuscation(Feature:="DllExport")>
    Public Function Add(ByVal X As Integer, ByVal Y As Integer) As Integer
      Return X + Y
    End Function

    End Module
  2. Скомпилировать.
  3. Дизассемблировать в il-код, найти там функцию:
    Код: Выделить всё
      .method public static int32  Add(int32 X,
                                       int32 Y) cil managed
      {
  4. Добавить команду экспорта:
    Код: Выделить всё
      .method public static int32  Add(int32 X,
                                       int32 Y) cil managed
      {
        .export [1] as Add
  5. Скомпилировать получившийся il-код.
Теперь функция видна из native-кода.

Описание этого метода можно найти в разных источниках. И это действительно работает. В некоторых не указаны шаги 3 - 5, но без них не работает.
А теперь вопрос. Можно ли это сделать как-то без кучи ручной работы? Конечно, можно сделать программу, которая будет её выполнять за меня, но хочется чего-нибудь нормального, а то метод всё-таки подозрительный...

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Создание экспортируемых функций в dll

Сообщение Kroos » 11.10.2014 (Сб) 13:26

_http://www.cyberforum.ru/net-framework/thread604590.html

Вариант полностью рабочий, нативное win32 приложение спокойно видит экспортируемые функции, вызывает их и т.п.
Осталось победить гемор с правильными декларациями и типизированием переменных, например мое приложение не понимает Unicode и нужно приводить юникодные vb# String в Ansi и т.п. + работать с указателями на разл типы.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.10.2014 (Сб) 20:23


Код странноват, делает автоматически то же, что я тут написал, плюс, есть какая-то магия с ресурсами.
Вроде бы косяки есть (типа удаления всех *.resources в папке с исходной dll), но насколько всё работоспособно при соответствующем использовании навскидку оценить не могу.

PS: Зачем делать ссылку некликабельной?

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Создание экспортируемых функций в dll

Сообщение Kroos » 11.10.2014 (Сб) 21:15

Ну спрашивал же как можно сделать без ручной работы. да, с ресурсами косяк, можно релиз скомпилировать в ILASM вручную с опцией /RES, а тестить (ну в моем случае) можно и без ресурсов. Свою приблуду такую написать чтоли...
Qwertiy писал(а):PS: Зачем делать ссылку некликабельной?
привычка, вдруг ссылки не приветствуются на сторонние ресурсы, кому надо зайдет...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList