динамич. загрузка модулей ф-ций, кросс-платформенность. как?

Тема в разделе "LANGS.C", создана пользователем varnie, 11 авг 2008.

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    день добрый !

    проясните плз мое понимание следующего:
    мне нужно при соблюдении нек. условий в моей С++ проге подгрузить модули с реализованными в них С/C++ ф-циями. если условия не были соблюдены то динамической подгрузки этих модулей производить не надо.
    правильно ли я понимаю, что кроме как через работу c динамической загрузкой DLL (в мире винды) и модулями (*.so), которые мне придется скомпилять отдельно, и реализовать в них свои C/C++ ф-ции, в мире UNIX больше эту задачу никак не решить? если это так, то правильно ли я считаю, что мне придется реализовать как работу с DLL, так и работу с модулями, чтобы достигнуть кросс-платформенности моего приложения?
    или же можно не опускаться на системный уровень операционных систем, и воспользоваться штатными С/C++ средствами?

    спасибо за комменты.
     
  2. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    в мире винды можно ещё воспользоваться отложенной загрузкой (/DELAYLOAD). то бишь пока хоть одну функцию из указанной dll не вызвал, она и не загрузится. и все заботы по динамической загрузке при этом на компиляторе.
     
  3. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Штатных С++ средств для этого, AFAIK, не существует.
     
  4. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    varnie всё что связано с подгрузкой модулей (LoadLibrary(), GetProcAddress()...) живёт вне стандарта C/C++ и сделано по-разному на каждой OS. Но, никто тебе не мешает обернуть эти ф-ции. Т.е. сделать свой cross-platform API.
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    s0larian
    +1 причем не так это сложно как кажеться, конечно если этих платформ ограниченное колво... Как вариант, модули сделать в виде скриптов, например на Lua/java.
     
  6. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Есть еще такой вариант. Придумай собственный формат модулей динамической загрузки. К тому же, не понятно, какая именно тебе нужна кроссплатформенность. Если на уровне исходных кодов, то можешь реализовать модули в виде исполняемых файлов (в Windows *.exe).
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    спасибо за пояснения.
    мне нужно реализовать на С/C++ "механизм", который бы позволил мне иметь единый интерфейс для загрузки моих С/C++ ф-ций вынесенных в специфические для разных операционных систем библиотеки не нарушая архитектуры моего ООП приложения. чтобы при сборке моей программы под виндами/линуксами я лишь указал бы директиву препроцессора, под какую ОСь я собрался скомпильнуть свою прогу и автоматически использовалась бы соответствующая этой ОС работа по загрузке моих ф-ций.

    ps: окей, буду копать.