Подключение своих .dll к Lotus

Тема в разделе "Lotus - Программирование", создана пользователем FixeR, 27 май 2010.

  1. FixeR

    FixeR Гость

    Здравствуйте!

    Есть задача написать самую простую dll (для начала), которую можно использовать в Лотусе.
    Библиотеку можно подключить через команду Uselsx <dll name>. Dll-ки написанные обычным способом (например, в VC++) не подключаются, даже если отключить декорирование имен функций.
    Но я знаю точно, что dll можно подключить.
    Вопрос в том, как их надо писать, чтобы можно было подключить?

    Единственное, что удалось откопать - LSXToolKit 3.1, древнейшая программа, рассчитана на работу с R5. В программе можно создавать этакую "болванку" - описание классов, функций, методов, на выходе получаются исходные файлы для VC++ 6. Но пока что создать собственный проект не получается...

    Кто-нибудь что-нибудь знает по данному вопросу?
     
  2. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Если из Dll функции экспортируются с нормальными именами, то и в Лотусе они нормально подключаются. Я использовал DEF-файл в VC++ для создания "нормальных" имен.
     
  3. Klido

    Klido Гость

    явно вопрос не по теме программирования в лотусе :)
    dll должна быть написана и скомпонована для внешнего использования. КАК это делать - см. документацию по среде разработки, в которой создается dll.

    насчет подключения скамих dll, например - см. http://codeby.net/forum/threads/19387.html?vi...st&p=171255
     
  4. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    LSX нужен если вы хотите чтоб разработчику на LS были доступны ваши объекты. Примерно также как Notes предоставляет NotesDocument и т.п.
    Вызов простых методов dll доступен через Declare. Для удобства рекомендую объявлять экспортируемые функции как extern "C", чтоб не пришлось писать манглированные имена методов.

    Можно ещё оформить ваш код как COM-объект. Тогда из LS его звать через CreateObject.
     
  5. FixeR

    FixeR Гость

    Все оказалось гораздо проще. Я использовал extern "C" перед именем функции, думал работает.
    Проверил - оказывается нет. :)
    По дефолту имя функции "Add" экспортируется как "?Add@@YGHHH@Z"
    extern "C" почему-то даёт "Add" => "_Add@8"

    Почему так, интересно?

    Пришлось использовать вот такой способ:
    #pragma comment(linker, "/export:Add=?Add@@YGHHH@Z")
    что, как вы понимаете, довольно накладно....

    P.S. Извините, что не по теме получается, я думал с лотусом проблема...
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Как насчёт extern __stdcall Add?
     
  7. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    работает
    extern "C" __declspec(dllexport) Add(long, long)

    Ещё можно использовать .def файл.
     
  8. FixeR

    FixeR Гость

    Всё выяснил, оказывается, если использовать соглашение __stdcall, то с extern "C" имена функций все равно будут декорироваться, другим способом.

    Пришлось использовать .def файл.
     
  9. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    А вот так, без _stdcall тоже декорируется?
    У меня есть dll которая именно так экспортировала функцию и функция получилась не декорированной.
     
  10. FixeR

    FixeR Гость

    Так не декорируется, но мне нужен именно __stdcall :)
     
Загрузка...

Поделиться этой страницей