Скачать MetaTrader 5

Помогите подключит DLL - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Slava
Модератор
6942
Slava  
Массивы - любые. Даже строковые. Примеры есть у нас в ExpertSample.dll, их использование - в ExpertFunctions.mq4. Всё это добро ищите в директории experts/samples

Примеры описаны также и в https://docs.mql4.com/ru/basis/preprosessor/import

Посмотрите пример здесь https://www.mql5.com/ru/forum/50604 (в функцию WinAPI GetLocalTime должен передаваться указатель на структуру из 8 2-х байтовых слов, в которую записываются значения времени)

И здесь https://www.mql5.com/ru/forum/50651
logoped_vl
142
logoped_vl  
stringo писал (а):
Посмотрите пример здесь https://www.mql5.com/ru/forum/50604 (в функцию WinAPI GetLocalTime должен передаваться указатель на структуру из 8 2-х байтовых слов, в которую записываются значения времени)
По поводу примеров растолкуйте синтаксис (int& TimeArray[]) - этого по моему нет в описании.
Я могу догадаться, что это как раз указатель. Однако хотелось бы знать точно.

А вот эта часть кода для меня вообще темный лес
nYear=TimeArray[0]&0x0000FFFF;
nMonth=TimeArray[0]>>16;
nDay=TimeArray[1]>>16;
nHour=TimeArray[2]&0x0000FFFF;
nMin=TimeArray[2]>>16;
nSec=TimeArray[3]&0x0000FFFF;
---------------------------------------------------
TimeArray[0]& - это видимо указатель на нулевой член массива, а '0x0000FFFF' -'это что за действие с ним.
Что значит такая запись 'TimeArray[0]>>16' - тоже хотелось бы знать.
Думаю это что-то из адресной математики. Ну напишите тогда еще одну главу в словаре MQL4
Slava
Модератор
6942
Slava  
процитирую с последней ссылки https://www.mql5.com/ru/forum/50651
===
Функция WinAPI GetLocalTime вообще принимает в качестве параметра не массив, а структуру из 8 слов (WORD - двухбайтовое целое)
typedef struct _SYSTEMTIME { 
    WORD wYear; 
    WORD wMonth; 
    WORD wDayOfWeek; 
    WORD wDay; 
    WORD wHour; 
    WORD wMinute; 
    WORD wSecond; 
    WORD wMilliseconds; 
} SYSTEMTIME, *PSYSTEMTIME;

===
в MQL4 нет 2-хбайтовых целых (тип short), а есть только 4-хбайтовые целые (тип int). Поэтому такие битовые операции над 4-байтовыми целыми выделяют необходимые 2-байтовые целые.
По порядку:
год получается при помощи обнуления левой половины самого первого элемента массива
месяц получается путём сдвига на 16 бит (то есть левая половина сдвигается на место правой половины)

Про битовые операции смотрите https://docs.mql4.com/ru/basis/operations/bit

В обсуждаемом примере иллюстрируется возможность передавать указатель на массив и обработка полученных в этом массиве значений
Если же Вам необходимо передать в dll-скую функцию указатель на переменную целого типа, то передавайте массив соответствующего типа по ссылке и обрабатывайте потом его первый элемент

. ... Rick D. ... .
1181
. ... Rick D. ... .  
А что с возвращаемыми строками получается?
Например
#import "kernel32.dll"
  string GetCommandLineA();
#import

вполне работает.
rosen_tech
3
rosen_tech  

Всем доброго времени суток!

простое решение нашел klot, на ветке http://www.fxexpert.ru/forum/index.php?showtopic=656&st=140

приведу от туда кусочек кода

#import "NS2-32.dll"
int OpenNet(string defpath, int& netnumber[1], int& n_input[1], int& n_out[1]);
int FireNet(int& netnumber[1], double& inarray[], double& outarray[]);
int CloseNet(int& netnumber[1]);
#import

............................

//------------------------------------------------------------------+
int ret;
int netnumber[1], N_in[1], N_out[1];
double inarray[],outarray[];
string defpath="C:NeuroShell 2EXAMPLESTest2FFT_test.def";
//------------------------------------------------------------------+
................................

int init()
{

..........................................

ret=OpenNet(defpath, netnumber, N_in, N_out);

Apelsin
395
Apelsin  
rosen_tech:

Всем доброго времени суток!

простое решение нашел klot, на ветке http://www.fxexpert.ru/forum/index.php?showtopic=656&st=140

приведу от туда кусочек кода

#import "NS2-32.dll"
int OpenNet(string defpath, int& netnumber[1], int& n_input[1], int& n_out[1]);
int FireNet(int& netnumber[1], double& inarray[], double& outarray[]);
int CloseNet(int& netnumber[1]);
#import

............................

//------------------------------------------------------------------+
int ret;
int netnumber[1], N_in[1], N_out[1];
double inarray[],outarray[];
string defpath="C:NeuroShell 2EXAMPLESTest2FFT_test.def";
//------------------------------------------------------------------+
................................

int init()
{

..........................................

ret=OpenNet(defpath, netnumber, N_in, N_out);

   У кого это работает ?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий