• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы FixeR
  • Дата начала
F

FixeR

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

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

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

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

Мыш

Lotus Team
12.02.2008
1 220
29
BIT
67
Dll-ки написанные обычным способом (например, в VC++) не подключаются, даже если отключить декорирование имен функций.

Если из Dll функции экспортируются с нормальными именами, то и в Лотусе они нормально подключаются. Я использовал DEF-файл в VC++ для создания "нормальных" имен.
 
K

Klido

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

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

TIA

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

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

FixeR

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

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

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

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

FixeR

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

Пришлось использовать .def файл.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!