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

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

FixeR

Гость
#1
Здравствуйте!

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

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

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

Мыш

Well-Known Member
Lotus team
12.02.2008
1 084
13
#2
Dll-ки написанные обычным способом (например, в VC++) не подключаются, даже если отключить декорирование имен функций.
Если из Dll функции экспортируются с нормальными именами, то и в Лотусе они нормально подключаются. Я использовал DEF-файл в VC++ для создания "нормальных" имен.
 
K

Klido

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

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

TIA

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

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

FixeR

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

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

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

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

FixeR

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

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