Помогите создать простейшую DLL С++

Тема в разделе "LANGS.C", создана пользователем CrawlUp, 23 окт 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Перепробывал уже весь имеющийся код в интернете. Но создать рабочую dll не получается. Код который предложен на msdn создает dll и её можно загрузить статическим способом, но динамически опять фейл.
    Создаю dll на ассемблере и легко получаю адрес функции через LoadLibrary и GetProcAddress, но создать dll на С++ и получить адрес через GetProcAddress не представляется возможным. Борьба идёт не первый день, результат нулевой. Я бы мог понять если бы dll не создавались, но они создаются, но не работают.
    Возможно где-то в самих настройках компиляции не хватает какого-то волшебного пункта, танцы с бубном замахали, если смотреть в Ida Pro то dll но экспортные функции определяются правильно.
    Если возможно дайте минимальный код для dll и возможные настройки компилятора.
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Скорее всего проблема из-за декорирования имен. Просто используй DEF файл.
     
    CrawlUp нравится это.
  3. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Всё же разработчик fasma Tomasz Grysztar куда как умнее ребят в С++. Для того что бы понять как это делается в fasme достаточно посмотреть один маленький пример. Для того что бы разобраться как это делать в C++ надо туеву хучу времени, создать три файла с черт пойми каким синтаксисом и всё равно быть в недоумении. Чем дальше тем сильнее меня С++ разочаровывает.
    Рабочий код для динамической загружаемой библиотеки состоит из 3 файлов:
    Dll3.cpp:

    Код (Text):
    1. #include "stdafx.h"
    2. #include "Dll3.h"
    3.  
    4.  
    5. int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
    6. {
    7.     return TRUE;
    8. }
    9. EXPORT int CALLBACK MyFunction()
    10. {
    11.     MessageBox(NULL, 0, 0, MB_OK);
    12.     return 1;
    13. }

    Dll3.h:

    Код (Text):
    1. #define EXPORT extern "C" __declspec (dllexport)
    2. EXPORT int CALLBACK MyFunction();
    Dll3.def
    Код (Text):
    1. LIBRARY         "Dll3"
    2.         DESCRIPTION    'DLL3-библиотеки'
    3.  
    4.     EXPORTS
    5.         MyFunction     @1


     
    Последнее редактирование: 23 окт 2018
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Где создаешь? В dllmain?
     
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Как создаешь?
     
  6. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    спасибо за помощь, 5 часов мучался, оказывается скобки не там поставил, млинннннннннн и ведь нигде даже намёка на ошибку не выдаёт!!!!