Адрес переменной в MQL4

 

Можно ли узнать адрес переменной обявленой в скрипте. Нужно для передачи в функциию dll? Или это каким-то другим способом делается?

Спасибо))))

 

Через ссылку попробуй передают данные в длл из скрипта.

То есть если в длл
__declspec(dllexport) int _stdcall func1(double& d) {
...
}

то в скрипте можно передать так
double dVar;
func1(dVar);

При этом переменная dVar в длл может быть изменена и в скрипте будет новое значение.
Попробуй и расскажи что получилось :o)
Сам не пробовал, пока некогда, но думаю, что так будет работать.


 
Такое пробовал, не получается
 

тогда создай массив double и дабавь туда переменную одну и уж это наверняка можно получить в длл. в примере по крайней мере у них написано что так можно

 
это тоже получиться по ссылке, а длл адрес нужен
 
Я думаю так как MQL4 не совсем язык программирования (ну он в машинные коды не компилируется вроде) этого сделать так просто нельзя :'(

Хотя точный ответ Вам могут дать только разработчики.
 
Integer писал (а):
это тоже получиться по ссылке, а длл адрес нужен

А вот у них есть пример функция
MT4_EXPFUNC BOOL __stdcall SetArrayItemValue(double *arr,const int arraysize,const int nitem,const double value)
{
if(arr==NULL)
{
printf("GetArrayItemValue: NULL array\n");
return(FALSE);
}
if(arraysize<=0)
{
printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize);
return(FALSE);
}
if(nitem<0 || nitem>=arraysize)
{
printf("GetArrayItemValue: wrong item number (%d)\n", nitem);
return(FALSE);
}
arr[nitem]=value;
return(TRUE);
}

И как эта функция декларирована в скрипте
bool SetArrayItemValue(double& arr[],int,int,double);

И здесь как раз таки модифицируется элемент массива в скрипте
double arr[5]={1.5, 2.6, 3.7, 4.8, 5.9 };
if(SetArrayItemValue(arr,5,1,1234.5)==true)
Print("Changed to ",arr[1]);
То есть 2.6 заменится на 1234.5

и записывается это число в длл а массив передаётся как указатель хотя в скрипте так массив ссылок объявлен double& arr[]
 
Integer:
это тоже получиться по ссылке, а длл адрес нужен
А чем адрес от ссылки отличается?
 
Mak писал (а):
Integer писал (а):
это тоже получиться по ссылке, а длл адрес нужен
А чем адрес от ссылки отличается?

Надо подумать;-)
 
Mak, ты пошутил или не пошутил? Что по ссылке, что по значению, переменная остается переменной, только если по ссылке, изменения сделанные с этой переменной в функции отражаются на исходной перменной, а если по значению исходная переменная остается без изменений, а адрес это адрес. Но это я с точки зрения VB смотрю.
 

Вот такое дело получается:

#import  "bgexec.dll"
   bool ExecCmd(string lpCmdLine, int& lpExitCode, int dwTimeOut, bool bTerminate); 
#import
int start(){
   int RetCode;
   bool rv=ExecCmd("C:\\Program Files\\Winamp\\winamp.exe",RetCode,-1,false); 
   return(0);
}

Винамп запускается, а вот при его закрытии терминал падает.

There has been a critical error
Time : 2006.11.17 15:00
Program : Client Terminal
Version : 4.00 (build: 198, 19 Oct 2006)
Owner : MetaQuotes Software Corp. (MetaTrader)
OS : Windows XP Professional 5. 1 Service Pack 2 (Build 2600)
Processors : 1, type 586, level 15
Memory : 97776/14240 kb
Exception : C0000005
Address : 7C81AB1F
Access Type : write
Access Addr : 00000000

Registers : EAX=00000000 CS=001b EIP=7C81AB1F EFLGS=00010246
: EBX=00000000 SS=0023 ESP=01D0FA44 EBP=01D0FA60
: ECX=01D0FA28 DS=0023 ESI=00000000 FS=003b
: EDX=7C90EB94 ES=0023 EDI=00000000 GS=0000

Stack Trace : 01D1140E 00454105 0045EAE7 0045131C
: 7C80B50B 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000
Modules :
1 : 00400000 00298000 D:\Program Files\MetaTrader - Test\terminal. exe
2 : 01D10000 00008000 D:\Program Files\MetaTrader - Test\experts\libraries\bgexec. dll
3 : 10000000 0000A000 C:\PROGRA~1\MYWEBS~1\bar\1. bin\mwsoestb. dll
4 : 20000000 002CD000 C:\WINDOWS\system32\xpsp2res. dll
5 : 5B260000 00038000 C:\WINDOWS\system32\UxTheme. dll
6 : 61EC0000 0000E000 C:\WINDOWS\system32\MFC42LOC. DLL
7 : 71A80000 00008000 C:\WINDOWS\system32\WS2HELP. dll
8 : 71A90000 00017000 C:\WINDOWS\system32\WS2_32. dll
9 : 73D90000 000FE000 C:\WINDOWS\system32\MFC42. DLL
10 : 746E0000 0004B000 C:\WINDOWS\system32\MSCTF. dll
11 : 76350000 00005000 C:\WINDOWS\system32\MSIMG32. dll
12 : 76380000 00049000 C:\WINDOWS\system32\comdlg32. dll
13 : 76B20000 0002E000 C:\WINDOWS\system32\WINMM. dll
14 : 77110000 0008C000 C:\WINDOWS\system32\OLEAUT32. dll
15 : 773C0000 00102000 C:\WINDOWS\WinSxS\X86_Microsoft. Windows. Common-Controls_6595b64144ccf1df_6. 0.2600.2180_x-ww_a84f1ff9\COMCTL32.dll
16 : 774D0000 0013C000 C:\WINDOWS\system32\ole32. dll
17 : 77BF0000 00008000 C:\WINDOWS\system32\VERSION. dll
18 : 77C00000 00058000 C:\WINDOWS\system32\msvcrt. dll
19 : 77D30000 00090000 C:\WINDOWS\system32\USER32. dll
20 : 77DC0000 000AC000 C:\WINDOWS\system32\ADVAPI32. dll
21 : 77E70000 00091000 C:\WINDOWS\system32\RPCRT4. dll
22 : 77F10000 00046000 C:\WINDOWS\system32\GDI32. dll
23 : 77F60000 00076000 C:\WINDOWS\system32\SHLWAPI. dll
24 : 7C800000 000F6000 C:\WINDOWS\system32\kernel32. dll
25 : 7C900000 000B1000 C:\WINDOWS\system32\ntdll. dll
26 : 7C9C0000 00818000 C:\WINDOWS\system32\SHELL32. dll

Call stack :
7C81AAE7:0038 [7C81AB1F] GetExitCodeProcess [C:\WINDOWS\system32\kernel32. dll]
01D11354:00BA [01D1140E] ExecCmd [D:\Program Files\MetaTrader - Test\experts\libraries\bgexec. dll]
00453EE0:0225 [00454105] ?OnUpdateTimer@CExpertLogList
0045D6A0:1447 [0045EAE7] ?ExecuteRecursive@CExpertInterior
004511F0:012C [0045131C] ?SetInputVar@CExpertInterior
7C80B357:01B4 [7C80B50B] GetModuleFileNameA [C:\WINDOWS\system32\kernel32. dll]