Через ссылку попробуй передают данные в длл из скрипта.
То есть если в длл
__declspec(dllexport) int _stdcall func1(double& d) {
...
}
то в скрипте можно передать так
double dVar;
func1(dVar);
При этом переменная dVar в длл может быть изменена и в скрипте
будет новое значение.
Попробуй и расскажи что получилось :o)
Сам не пробовал, пока некогда, но думаю, что так будет работать.
тогда создай массив double и дабавь туда переменную одну и уж это наверняка можно получить в длл. в примере по крайней мере у них написано что так можно
Хотя точный ответ Вам могут дать только разработчики.
это тоже получиться по ссылке, а длл адрес нужен
А вот у них есть пример функция
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[]
это тоже получиться по ссылке, а длл адрес нужен
Вот такое дело получается:
#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]
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Можно ли узнать адрес переменной обявленой в скрипте. Нужно для передачи в функциию dll? Или это каким-то другим способом делается?
Спасибо))))