Подобная тема уже была на форуме. Тем не менее не все с ней понятно.
Набрал простой пример импорта строки из dll в МТ4. Возвращает крякозяблы. Может кто подсказать где ошибка?
Вы возвращете указатель на Паскалевскую строку (PChar), но в МКЛ нет такого типа.
Тип string в МКЛ :
struct MqlStr { int len; char *string; };
если судить по примерам в МТ4, то есть возвращать нужно указатель на тип, подобный MqlStr
Успехов...
Если я правильно понял, то делать нужно так:
unit Unit1;
interface
type
MQLString = record
Len: Integer;
Str: PChar;
end;
function RetStr: MQLString; stdcall;
exports
RetStr;
implementation
function RetStr: MQLString;
var
Str: MQLString;
S: string;
begin
S:= 'Возврат строки';
Str.Len:= Length(S);
Str.Str:= PChar(S);
Result := Str;
end;
end.
но в таком случае терминал вылетает по ошибке, хотя по логике вещей не должен...
https://forum.mql4.com/ru/4721/page3
строчки нельзя возвращать, можно принимать и менять имеющиеся, соблюдая ограничение по длине существующей строки.
Благодарю.
Попутный вопрос, а массив можно возвращать из dll?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подобная тема уже была на форуме. Тем не менее не все с ней понятно.
Набрал простой пример импорта строки из dll в МТ4. Возвращает крякозяблы. Может кто подсказать где ошибка?
//
#import "test.dll"
string RetStr();
#import
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----+
string S;
S= RetStr();
Alert(S);
//----
return(0);
}
//+------------------------------------------------------------------+
unit Unit1;
interface
function RetStr: PChar; stdcall;
exports
RetStr;
implementation
function RetStr: PChar;
begin
Result := 'Возврат строки';
end;
end.