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

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

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

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

Lotus и Dll

  • Автор темы jcolor
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

jcolor

Всем привет:))
НАписала dll в Delphi, теперь хочу присоединить ее для работы Лотусе
делаю все следующим образом:

- dll положила в каталог \notes\
- в агенте объявила функцию:
Код:
Declare Function GetSText Lib "Mydll.dll"_
Alias "GST" (Byval st As String, st2 As Long) As Long

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

В чем ошибка? Как правильно объявить?
 
J

jcolor

С этой проблемой разобралась, теперь столкнулась со следующей:)

не могу передать правильно значение string :((

к примеру, простая функция:
Код:
function GetSText(Str1 : PChar; var Str2: Pchar): Pchar; stdcall;
var
strtemp: pchar;
begin
str2:=str1;
Result:='qws1'

end;

вызов в Лотусе:
Код:
Dim str_11 As String
Dim str_22 As String

str_11="asdf"

Print GetSText(str_11,str_22)
Print str_22

При этом на выходе через GetSText(str_11,str_22)) текстовое значение выводится правильно, а через переменную str_22 - непонятные символы :(

Как правильно передавать данные ??
 
M

morpheus

Для: jcolor
При создании Dll в Delphi в юзесах ShareMem подключили ?
или
Declare Function GetSText Lib "Mydll.dll"_
Alias "GST" (Byval st As String,Byval st2 As Long) As Long
 
J

jcolor

Для: Morpheus
ShareMem подключила - ничего не изменилось:)

Объявила функцию следующим образом:

Declare Function GetSText Lib "MyDll.dll"_
Alias "GetSText" (Byval str1 As String, str2 As String) As String

- в этом случае переменная str2 возвращает непонятные символы ;)

Если использовать через ByVal:
Declare Function GetSText Lib "MyDll.dll"_
Alias "GetSText" (Byval str1 As String, Byval str2 As String) As String

-в этом случае переменная str2 вообще ничего не возвращает :(


Что дает Long в случае, как Вы написали:

<!--QuoteBegin-Morpheus+13:06:2007, 08:37 -->
<span class="vbquote">(Morpheus @ 13:06:2007, 08:37 )</span><!--QuoteEBegin-->Declare Function GetSText Lib "Mydll.dll"_
Alias "GST" (Byval st As String,Byval st2 As Long) As Long
[snapback]69145" rel="nofollow" target="_blank[/snapback]​
[/quote]
Если использовать Long при передачи из библиотеки Pchar - Лотус вообще вылетает
 
M

morpheus

<!--QuoteBegin-jcolor+13:06:2007, 10:04 -->
<span class="vbquote">(jcolor @ 13:06:2007, 10:04 )</span><!--QuoteEBegin-->Что дает Long в случае, как Вы написали
[snapback]69160" rel="nofollow" target="_blank[/snapback]​
[/quote]
Прошу прощенья, моя ачепятка

ище вариант , папробовать в самой Dll
Код:
function GetSText(Str1 : PChar; var Str2: Pchar): Pchar; stdcall;
var
strtemp: pchar;
begin
str2:=str1;
Result:=PChar( 'qws1' )

end;
 
J

jcolor

<!--QuoteBegin-Morpheus+13:06:2007, 10:15 -->
<span class="vbquote">(Morpheus @ 13:06:2007, 10:15 )</span><!--QuoteEBegin-->function GetSText(Str1 : PChar; var Str2: Pchar): Pchar; stdcall;
var
strtemp: pchar;
begin
str2:=str1;
Result:=PChar( 'qws1' )

end;[/quote]

В таком случае через функцию Result:=PChar( 'qws1' ) - выдается все корректно :)
Ошибка получается именно при передачи значения через переменную str2:=str1;
При вызове функции :
Код:
Dim str_prim AS String

CAll GetSText("пример"; str_prim)
Print str_prim

В этом случае теряется значение, похоже что вроде именно стринг не могу передать в функцию


Использование в DLL
Код:
str2:=Pchar(str1);

тоже не возвращает верный результат
 
J

jcolor

!!! получилось !!!
оказывается для передачи стринговой переменной в объявлении функции нужно было прописать Unicode :

Код:
Declare Function GetSText Lib "MYDLL.dll"_
Alias "GetSText" (Byval str1 As Unicode String,_
str2 As String) As String

ТАк заработало :)
 
N

nikols2004

Всем привет:()
НАписала dll в Delphi, теперь хочу присоединить ее для работы Лотусе
делаю все следующим образом:

- dll положила в каталог \notes\
- в агенте объявила функцию:
Код:
Declare Function GetSText Lib "Mydll.dll"_
Alias "GST" (Byval st As String, st2 As Long) As Long

Как решила проблему возврата Лотусом ошибки, что функция не найдена? Если помнишь конечно...столько времени прошло :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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