Импорт фунций из DLL. Строковые перепенные и массивы! - страница 3

 
Щаз пишу! elritmo может скажешь номер аськи, а то все равно больше никто не участвует?
Вот мой если надо 453-995-911
 
Пробовал со строкой, как ты написал
elritmo:
А вот так что не работает:

procedure exm1(str: PChar); stdcall;
begin
StrSpy(str, 'qwe');
end;

str должна в MQL быть проинициализирована вот так
for(i = 0; i < 4; i++) str = str + " ";
Не нашел функцию StrSpy() . Но нашел много похожих на неё.

 1) StrCopy(Str, 'qwe');
 2) StrLCopy(Str, 'qwe', 6);
 3) StrPCopy(Str, 'qwe');
 4) StrPLCopy(Str, 'qwe', 6);
 5) StrCat(Str, 'qwe');
 6) StrLCat(Str, 'qwe', 6);


Вот, я их в справке нашел (привожу только две функции, которыми думаю надо пользоваться, остальные похожи)

Copies an AnsiString (long string) to a null-terminated string.

Unit
SysUtils

Category
string handling routines (null-terminated)

Delphi syntax:
function StrPCopy(Dest: PChar; const Source: string): PChar;

C++ syntax:
extern PACKAGE char * __fastcall StrPCopy(char * Dest, const AnsiString Source);

Description
StrPCopy copies Source into a null-terminated string Dest. It returns a pointer to Dest.
StrPCopy does not perform any length checking.
The destination buffer   MUST  (должен) have room for at least Length(Source)+1 characters.


Copies characters from an AnsiString (long string) into a null-terminated string.

Unit
SysUtils

Category
string handling routines (null-terminated)

Delphi syntax:
function StrPLCopy(Dest: PChar; const Source: string; MaxLen: Cardinal): PChar;

C++ syntax:
extern PACKAGE char * __fastcall StrPLCopy(char * Dest, const AnsiString Source, unsigned MaxLen);

Description
StrPLCopy copies up to a maximum of MaxLen characters from Source into the null-terminated string Dest. StrPLCopy returns a pointer to Dest.
Note: Dest   should   (должен) point to a location with room for MaxLen + 1 characters, including the null terminator.

Поробовал все эти функции. Все работают. Причем почти для всех не надо передовать строку уже определенной длинны из MQL4. Какая бы длинна не была, после выполнения функции она становиться нужной.  Хотя в справке тоже написано, что длинна должна быть заранее определена (я выделил это место зеленым).

Остается вопрос какую функцию выбрать? Хотелось бы ту, которая наиболее коректно работала бы!
elritmo скажи, что думаешь, а то я в программировании мало знаю!
 
elritmo хотел еще попросить инфу про функцию StrSpy(). Если не сложно?
 

Я сам в делфи не использовал StrSpy(). Вероятно это функция StrPCopy.
Да судя по описанию это и должно быть копирование строки. Если работает то и хорошо.
Лучше всё же инициализировтать строку в советнике делая заданной длины потому что если передашь довольно длинную строку то может упасть программа. Видимо для скорости работы со string MQ уже выделяет буфер в памяти даже для пустой строки поэтому то ты и можешь туда записать короткую строку. Но не известно что получится если строка будет длинная. Попробуй для теста передать строку подлинее.

В аске тебя нет

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