1 //+------------------------------------------------------------------+
2 //| Sample DLL for MQL4 |
3 //| Copyright © 2004-2006, MetaQuotes Software Corp. |
4 //| http://www.metaquotes.net |
5 //+------------------------------------------------------------------+
6 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
11 #define MT4_EXPFUNC __declspec(dllexport)
12 //+------------------------------------------------------------------+
14 //+------------------------------------------------------------------+
32 static int CompareMqlStr(const void *left
,const void *right
);
33 //+------------------------------------------------------------------+
35 //+------------------------------------------------------------------+
36 BOOL APIENTRY
DllMain(HANDLE hModule
,DWORD ul_reason_for_call
,LPVOID lpReserved
)
39 switch(ul_reason_for_call
)
41 case DLL_PROCESS_ATTACH
:
42 case DLL_THREAD_ATTACH
:
43 case DLL_THREAD_DETACH
:
44 case DLL_PROCESS_DETACH
:
50 //+------------------------------------------------------------------+
52 //+------------------------------------------------------------------+
53 MT4_EXPFUNC
int __stdcall
GetIntValue(const int ipar
)
55 printf("GetIntValue takes %d\n",ipar
);
58 //+------------------------------------------------------------------+
60 //+------------------------------------------------------------------+
61 MT4_EXPFUNC
double __stdcall
GetDoubleValue(const double dpar
)
63 printf("GetDoubleValue takes %.8lf\n",dpar
);
66 //+------------------------------------------------------------------+
68 //+------------------------------------------------------------------+
69 MT4_EXPFUNC
char* __stdcall
GetStringValue(char *spar
)
71 printf("GetDoubleValue takes \"%s\"\n",spar
);
74 //+------------------------------------------------------------------+
76 //+------------------------------------------------------------------+
77 MT4_EXPFUNC
double __stdcall
GetArrayItemValue(const double *arr
,const int arraysize
,const int nitem
)
82 printf("GetArrayItemValue: NULL array\n");
87 printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize
);
90 if(nitem
<0 || nitem
>=arraysize
)
92 printf("GetArrayItemValue: wrong item number (%d)\n", nitem
);
98 //+------------------------------------------------------------------+
100 //+------------------------------------------------------------------+
101 MT4_EXPFUNC BOOL __stdcall
SetArrayItemValue(double *arr
,const int arraysize
,const int nitem
,const double value
)
106 printf("GetArrayItemValue: NULL array\n");
111 printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize
);
114 if(nitem
<0 || nitem
>=arraysize
)
116 printf("GetArrayItemValue: wrong item number (%d)\n", nitem
);
123 //+------------------------------------------------------------------+
125 //+------------------------------------------------------------------+
126 MT4_EXPFUNC
double __stdcall
GetRatesItemValue(const RateInfo
* rates
,const int rates_total
,const int shift
,const int nrate
)
131 printf("GetRatesItemValue: NULL array\n");
137 printf("GetRatesItemValue: wrong rates_total number (%d)\n", rates_total
);
141 if(shift
<0 || shift
>=rates_total
)
143 printf("GetRatesItemValue: wrong shift number (%d)\n", shift
);
147 if(nrate
<0 || nrate
>5)
149 printf("GetRatesItemValue: wrong rate index (%d)\n", nrate
);
153 int nitem
=rates_total
-1-shift
;
156 case 0: return double(rates
[nitem
].ctm
);
157 case 1: return rates
[nitem
].open
;
158 case 2: return rates
[nitem
].low
;
159 case 3: return rates
[nitem
].high
;
160 case 4: return rates
[nitem
].close
;
161 case 5: return rates
[nitem
].vol
;
166 //+------------------------------------------------------------------+
168 //+------------------------------------------------------------------+
169 MT4_EXPFUNC
int __stdcall
SortStringArray(MqlStr
*arr
,const int arraysize
)
174 printf("SortStringArray: NULL array\n");
179 printf("SortStringArray: wrong arraysize (%d)\n", arraysize
);
183 qsort(arr
,arraysize
,sizeof(MqlStr
),CompareMqlStr
);
187 //+------------------------------------------------------------------+
189 //+------------------------------------------------------------------+
190 MT4_EXPFUNC
int __stdcall
ProcessStringArray(MqlStr
*arr
,const int arraysize
)
196 printf("ProcessStringArray: NULL array\n");
201 printf("ProcessStringArray: wrong arraysize (%d)\n", arraysize
);
205 for(int i
=0; i
<arraysize
-1; i
++)
207 if(arr
[i
].string
==NULL
) len1
=0;
208 else len1
=strlen(arr
[i
].string
);
209 if(arr
[i
+1].string
==NULL
) len2
=0;
210 else len2
=strlen(arr
[i
+1].string
);
211 //---- uninitialized string
212 if(arr
[i
+1].string
==NULL
) continue;
213 //---- destination string is uninitialized and cannot be allocated within dll
214 if(arr
[i
].string
==NULL
) continue;
215 //---- memory piece is less than needed and cannot be reallocated within dll
216 if(arr
[i
].len
<len1
+len2
) continue;
217 //---- final processing
218 strcat(arr
[i
].string
,arr
[i
+1].string
);
223 //+------------------------------------------------------------------+
225 //+------------------------------------------------------------------+
226 int CompareMqlStr(const void *left
,const void *right
)
228 MqlStr
*leftstr
=(MqlStr
*)left
;
229 MqlStr
*rightstr
=(MqlStr
*)right
;
231 if(leftstr
->string
==NULL
) return(-1);
232 if(rightstr
->string
==NULL
) return(1);
234 return(strcmp(leftstr
->string
,rightstr
->string
));
236 //+------------------------------------------------------------------+