параметры-переменные функции ДЛЛ в Дельфи - страница 2

 
IgorM:
почитайте статью https://www.mql5.com/ru/articles/96

Ей, родимой и руководствовался.

В примере дано в МТ5 объявление

struct STRUCT_DATA
  {
   int i;
   double d;
   bool b;
   datetime dt;
  };

#import "dll_mql5.dll"
    string SetStruct(STRUCT_DATA &data);
#import
 

у меня

struct OperRes {
OperR, // Тип операции чтения
OperW, // Тип операции записи
OperRes: Integer;
}

= разница в наименовании структуры

= + разница МТ4 и МТ5 = ??

М Едитор плюет на struct

=

'struct' - expression on global scope not allowed F:\MQL4\experts\fxMT4.mq4 (8, 1)
'struct' - variable not defined F:\MQL4\experts\fxMT4.mq4 (8, 1)

 

в МТ4 нет структур, только массивы, да и по словам разработчиков в МТ4 вызов длл намного дольше чем в МТ5

 
Arxan:

Пока решил сделать шифр для связи с ДЛЛ


Из ситуации выкрутился, все работает.

Вопросы на потом остались:

1. МетаЭдитор не принимает слово struct

2. МТ4 сбоит при связи с функцией ДЛЛ по ссылке.


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

 

Arxan, по ссылке в DLL передаются только массивы и строковые переменные (речь идёт о MQL4). Остальные переменные могут передаваться только по значению. При этом оператор "&" работает только в MQL-функциях, он не предназначен для внешних функций, насколько я понимаю. Поэтому если ты хочешь изменять значение какой-то переменной в DLL, то тогда тебе нужно передавать туда не переменную, а массив, причём без всяких "&"

 
Arxan:

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


experts\samples\DLLSample

https://www.mql5.com/ru/articles/1533

 
Meat:

Arxan, по ссылке в DLL передаются только массивы и строковые переменные (речь идёт о MQL4). Остальные переменные могут передаваться только по значению. При этом оператор "&" работает только в MQL-функциях, он не предназначен для внешних функций, насколько я понимаю. Поэтому если ты хочешь изменять значение какой-то переменной в DLL, то тогда тебе нужно передавать туда не переменную, а массив, причём без всяких "&"

1. = четко сформулировано то, что я думал

2. массив я передаю

int BarMT4_Sd(int& dt[], double& cH[], double& cL[], int ln);

без & что-то не работало, сейчас не помню что.

Насчет изменения в массиве = спасибо, запомню на потом.

С переводом части кода в ДЛЛ получилось даже лучше, чем планировал

 
sergeev:

experts\samples\DLLSample

https://www.mql5.com/ru/articles/1533


Наскоро глянул - там все в ДЛЛ, как у меня работает.

Мне надо ИЗ ДЛЛ

 
Arxan:

Наскоро глянул - там все в ДЛЛ, как у меня работает.

Мне надо ИЗ ДЛЛ


вы зашорились своей задачей.

в примерах все, что вообще можно.

 
Arxan:

Мне надо ИЗ ДЛЛ

Я же написал в первом же посте...

В MQL:

#import "some.dll"
   void GetInt(int value[]);

//...

{
   int value[] = {0};
   GetInt(value);
   Print(value[0]);
}

В длл (С++)

//...

MT4_EXPORT void __stdcall GetInt(int* value)
{
   *value = 5;
}

Ну народ пошел, ваще вникать не хочет...

Надо разжевать и в рот положить.

Код не проверял, так что теоретически могут быть косяки, принцип надеюсь понятен.

 
TheXpert:

Я же написал в первом же посте...

В MQL:

В длл (С++)

Ну народ пошел, ваще вникать не хочет...

Надо разжевать и в рот положить.

Код не проверял, так что теоретически могут быть косяки, принцип надеюсь понятен.


Народ С++ не понимай.

Моя Паскаль понимай.

Sorry.

А

void GetInt(int value[]);

это как раз прием через массив, это на потом.

Статья в закладках ждет своего часа, спасибо

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