Lotus и Dll

Тема в разделе "Lotus - Программирование", создана пользователем jcolor, 12 июн 2007.

Статус темы:
Закрыта.
  1. jcolor

    jcolor Гость

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

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

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

    jcolor Гость

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

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

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

    end;
    вызов в Лотусе:
    Код (Text):
    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 - непонятные символы :(

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

    v2v Гость

    а byVal добавить попробуй.
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: jcolor
    При создании Dll в Delphi в юзесах ShareMem подключили ?
    или
    Declare Function GetSText Lib "Mydll.dll"_
    Alias "GST" (Byval st As String,Byval st2 As Long) As Long
     
  5. jcolor

    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 - Лотус вообще вылетает
     
  6. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--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
    Код (Text):
    function GetSText(Str1 : PChar; var Str2: Pchar): Pchar; stdcall;
    var
    strtemp: pchar;
    begin
    str2:=str1;
    Result:=PChar( 'qws1' )

    end;
     
  7. jcolor

    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;
    При вызове функции :
    Код (Text):
    Dim str_prim AS String

    CAll GetSText("пример"; str_prim)
    Print str_prim
    В этом случае теряется значение, похоже что вроде именно стринг не могу передать в функцию


    Использование в DLL
    Код (Text):
    str2:=Pchar(str1);
    тоже не возвращает верный результат
     
  8. jcolor

    jcolor Гость

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

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

    nikols2004 Гость

     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей