Страница 1 из 1

Вопрос по Template Language

Добавлено: 15 Февраль 2016, 8:08
Игорь Столяров
Привет всем ! :)

В файле adoobj.tpw есть вот такая конструкция:

Код: Выделить всё

#rundll('ClaADOtp.dll', 'GetSPInfo', %svTmpConnectStr), release
#if(%svTmpConnectStr <> ' ')
...
#endIf
Т.е. загружается DLL, вызывается в ней процедура, передается строка параметров и в ней же возвращается результат.
А где можно посмотреть в какой код этот "#rundll" разворачивается ?
Или как вообще можно сделать такое действие ? Операторы Call()/Unload() не работаю с параметрами. :(

Заранее спасибо, тем кто разбирается в Template Language !
А то меня работа с шаблонами, как правописание у Винни Пуха.
Оно есть, но хромает сильно. :)

Вопрос по Template Language

Добавлено: 15 Февраль 2016, 11:10
kreator
Есть TemplateLanguageReference.pdf в папке docs. Там есть об этом. Конкретно о #rundll. Просто вызов внешней процедуры из dll, и вроде как процедура не должна ничего возвращать. Посмотри повнимательней.

Вопрос по Template Language

Добавлено: 15 Февраль 2016, 11:26
Дед Пахом
#rundll изменяет переданный параметр, смотрите хелп.

Код: Выделить всё

#RUNDLL ('Services.DLL', 'AskForName', %UserName)
Я думаю, стандартный метод вызова процедур из dll вполне годится:

Код: Выделить всё

  MAP
    MODULE('ClaADOtp.dll')
       GetSPInfo(*CSTRING),RAW,NAME('fptr_GetSPInfo'),DLL
    END
  END
  
szGetSPInfo                CSTRING('GetSPInfo'), STATIC
paGetSPInfo               LONG, NAME('fptr_GetSPInfo')

  hdll = LoadLibrary('ClaADOtp.dll')
  IF hdll
    paGetSPInfo = GetProcAddress(hdll, szGetSPInfo)
  END
  ...
szSPInfo  CSTRING(10000)
  GetSPInfo(szSPInfo )
  
  ...
  FreeLibrary(hdll)