Lotus и Dll

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

jcolor

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

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

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

jcolor

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

не могу передать правильно значение 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 - непонятные символы :(

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

morpheus

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

jcolor

#5
Для: 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 - Лотус вообще вылетает
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
<!--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

#7
<!--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

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

Код:
Declare Function GetSText Lib "MYDLL.dll"_
Alias "GetSText" (Byval str1 As Unicode String,_
str2 As String) As String
ТАк заработало :)
 
N

nikols2004

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

- dll положила в каталог \notes\
- в агенте объявила функцию:
Код:
Declare Function GetSText Lib "Mydll.dll"_
Alias "GST" (Byval st As String, st2 As Long) As Long
Как решила проблему возврата Лотусом ошибки, что функция не найдена? Если помнишь конечно...столько времени прошло :)
 
Статус
Закрыто для дальнейших ответов.