Передача строки ИЗ dll.

 
Подскажите пожалуйста, как педедать строку через параметр из dll? Через string или char[] c длиной... Перепробовал кучу вариантов, в том чилсе и найденых тут, но ни один не сработал...
 
https://www.mql5.com/ru/articles/96 может это поможет.
Руководство по написанию DLL для MQL5 на Delphi
Руководство по написанию DLL для MQL5 на Delphi
  • www.mql5.com
Статья рассматривает механизм написания модудя DLL на популярном языке программирования ObjectPascal в среде разработки Delphi. Изложенный в статье материал ориентирован в первую очередь на начинающих программистов, решающих задачи, выходящие за рамки встроенного языка программирования MQL5, путем подключения внешних DLL модулей.
 
DrSky:
Подскажите пожалуйста, как педедать строку через параметр из dll? Через string или char[] c длиной... Перепробовал кучу вариантов, в том чилсе и найденых тут, но ни один не сработал...

наиболее надёжный способ - через заранее в MQL сделанный буфер.

//C

int my_get_string(wchar_t *buffer,int buf_size)
{

/// копируем данные в указанный буфер, не более buf_size включая завершающий 0
        /// возвращаем кол-во скопированных символов
        return copiedSymbol;

}

// MQL
#import my.dll
     int my_get_string(ushort &[],int);

#import

string get_string() {

    ushort data[255];
    int count=my_get_string(data,ArraySize(data));
    if (count) {

return CharArrayToString(....)

    }
    return "";

}

 
Maxim Kuznetsov #:

наиболее надёжный способ - через заранее в MQL сделанный буфер.

//C

int my_get_string(wchar_t *buffer,int buf_size)
{

/// копируем данные в указанный буфер, не более buf_size включая завершающий 0
        /// возвращаем кол-во скопированных символов
        return copiedSymbol;

}

// MQL
#import my.dll
     int my_get_string(ushort &[],int);

#import

string get_string() {

    ushort data[255];
    int count=my_get_string(data,ArraySize(data));
    if (count) {

return CharArrayToString(....)

    }
    return "";

}

В принципе, так и думал, но получается не очень элегантное решение. Есть конечно вариант через двойной указатель, но так же такое себе... 

 
DrSky #:

В принципе, так и думал, но получается не очень элегантное решение. Есть конечно вариант через двойной указатель, но так же такое себе... 

в 90% случаев строки приходится ещё и перекодировать из транспортной utf-8 (и типичной для C/C++).

Так что обмен через массив самое то - и правообладание над объектами (строками в данном случае) не нарушается и перекод делается

Причина обращения: