-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdll-for-metatrader-5-linux.html
More file actions
258 lines (219 loc) · 11.1 KB
/
dll-for-metatrader-5-linux.html
File metadata and controls
258 lines (219 loc) · 11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
<!DOCTYPE html>
<!--[if IE 8 ]><html class="ie ie8" lang="ru"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="ru">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="author" content="Косолапов Дмитрий">
<meta name="google-site-verification" content="yJ35ns77j5pUPUutyBdAd5CwjqK3TGn5prTlyf2LlSo">
<title>Косолапов Дмитрий: мысли умные и не только. - dll для MetaTrader 5 в linux</title>
<link href="https://dicos.ru/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Косолапов Дмитрий: мысли умные и не только. Full Atom Feed" />
<link href="https://dicos.ru/feeds/all.rss.xml" type="application/rss+xml" rel="alternate" title="Косолапов Дмитрий: мысли умные и не только. Full RSS Feed" />
<!-- CSS -->
<link rel="stylesheet" href="https://dicos.ru/theme/css/style.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="https://dicos.ru/theme/css/colors/blue.css" id="colors">
<!-- Code highlight color scheme -->
<link href="https://dicos.ru/theme/css/code_blocks/darkly.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<meta name="tags" contents="C" />
<meta name="tags" contents="metatrader" />
<meta name="tags" contents="wine" />
<meta property="og:locale" content="">
<meta property="og:site_name" content="Косолапов Дмитрий: мысли умные и не только.">
<meta property="og:type" content="article">
<meta property="article:author" content="">
<meta property="og:url" content="https://dicos.ru/dll-for-metatrader-5-linux.html">
<meta property="og:title" content="dll для MetaTrader 5 в linux">
<meta property="og:description" content="">
<meta property="og:image" content="https://dicos.ru/images/guilherme-toti.jpg">
<meta property="article:published_time" content="2014-04-22 17:02:00+07:00">
</head>
<body>
<header id="header">
<!-- Container -->
<div class="container">
<!-- Logo / Mobile Menu -->
<div class="nine.columns columns">
<div id="logo">
<h1><a href="https://dicos.ru/">Косолапов Дмитрий: мысли умные и не только.</a></h1>
</div>
</div>
<!-- Navigation
================================================== -->
<div class="seven columns">
<nav id="navigation" class="menu">
<ul id="responsive">
<li><a href="https://dicos.ru/">Главная</a></li>
<li><a href="https://dicos.ru/about.html">Обо мне</a></li>
</ul>
</nav>
</div>
</div>
<!-- Container / End -->
</header>
<!-- Header / End -->
<div id="content-wrapper">
<section id="titlebar">
<!-- Container -->
<div class="container">
<div class="sixteen columns">
<nav id="breadcrumbs">
<ul>
<li>Текущее нахождение:</li>
<li><a href="https://dicos.ru/">Главная</a></li>
<li><a href="https://dicos.ru/category/metatrader.html">Metatrader</a></li>
<li>dll для MetaTrader 5 в linux</li>
</ul>
</nav>
</div>
</div>
<!-- Container / End -->
</section>
<div class="container">
<div class="twelve alt columns">
<article class="post" style="margin: 0; border: 0;">
<section class="post-content">
<header class="meta">
<h2><a href="https://dicos.ru/dll-for-metatrader-5-linux.html">dll для MetaTrader 5 в linux</a></h2>
<ul>
<li>By <a href="https://dicos.ru/author/admin.html">admin</a></li>
<li>Вт 22 Апрель 2014</li>
</ul>
</header>
<p>Уже как месяц изучаю платформу для торговли ценными бумагами MetaTrader
5. В планах у меня стоит написать до лета торговую систему, которая
будет торговать, торговать, торговать и к Новому Году я стану
миллионером. :-)</p>
<p>Отвлекся. Тут я хотел рассказать о первой проблеме, с которой столкнулся
в процессе разработки. Нужно было подключить к скрипту Metatrader-а свою
dll-ку, написанную на C.На момент битвы над ошибкой использовал Xubuntu
13.10 (32 bit), Wine 1.6.1 и MetaTrader 5 (build 910). Для компиляции
dll файлов использовал кроссплатформенный компилятор mingw и mingw-w64</p>
<p>Как ошибку воспроизвести:</p>
<p>Код самой dll-ки (simple.cpp):</p>
<pre class="literal-block">
extern "C" {
int qwe() {
return 1;
}
}
</pre>
<p>Компилируем командой i686-w64-mingw32-g++ -shared -o out.dll simple.cpp</p>
<p>В MetaEditor, Вставляем код, приведенный ниже. Этот программный код
должен вызывать функцию qwe из dll файла:</p>
<pre class="literal-block">
#import "out.dll"
int qwe();
#import
void OnStart()
{
Print(qwe());
}
</pre>
<p>запускаем этот код, видим, что Metatrader показывает окно, в котором
нужно подтвердить запуск dll файлов.
<a class="reference external" href="//img-fotki.yandex.ru/get/107473/44073636.2/0_132e48_8a0c988d_orig"><img alt="076" src="//img-fotki.yandex.ru/get/151498/44073636.2/0_132e49_a71be633_orig" style="width: 300px; height: 147px;" /></a></p>
<p>Подтверждаем. После подтверждения видим, в фрейме
"инструменты"->"эксперты" надпись
2014.04.22 16:41:57.190 simple (Si-6.14,H1) Cannot load 'C:\Program
Files\ОТКРЫТИЕ-Брокер\MQL5\Projects\out.dll'
<a class="reference external" href="//img-fotki.yandex.ru/get/41468/44073636.2/0_132e4a_e290f75b_orig"><img alt="077" src="//img-fotki.yandex.ru/get/41468/44073636.2/0_132e4a_e290f75b_orig" style="width: 300px; height: 84px;" /></a></p>
<p>В ходе экспериментов обнаружил, что если установить не mingw-w64-i686 а
более старый mingw, то скомпилированный файл метатрейдер без проблем
подключает:</p>
<p>Компилируем: i586-mingw32msvc-g++ -mrtd -shared -o out.dll simple.cpp</p>
<p>Запускаем в MetaEditor код, нажав на кнопку клавиатуры F5. Metatrader
"спрашивает" можно или нет подключить dll файл:
<a class="reference external" href="//img-fotki.yandex.ru/get/107473/44073636.2/0_132e48_8a0c988d_orig"><img alt="075" src="//img-fotki.yandex.ru/get/107473/44073636.2/0_132e48_8a0c988d_orig" style="width: 300px; height: 148px;" /></a></p>
<p>Подтверждаем. После подтверждения в фрейме "инструменты"->"эксперты"
единичку. То есть dll-ка заработала.
<a class="reference external" href="//img-fotki.yandex.ru/get/60537/44073636.2/0_132e4b_f910b026_orig"><img alt="078" src="//img-fotki.yandex.ru/get/60537/44073636.2/0_132e4b_f910b026_orig" style="width: 300px; height: 96px;" /></a></p>
<p>Если внимательно приглядеться, то можно увидеть, что если компилируем
при помощи i686-w64-mingw32-g++, то Metatrader пытается загрузить
какую-то библиотеку libgcc_s_sjlj-1.dll, а
компилятор i586-mingw32msvc-g++ как-то обходится без нее.</p>
<p>Решение проблемы нашел в интернете: нужно к компилятору добавить
параметр -static-libgcc. Другими словами, компилировать dll файл нужно
так:</p>
<pre class="literal-block">
i686-w64-mingw32-g++ -static-libgcc -shared -o out.dll simple.cpp
</pre>
<div class="tags">
<p>tags: <a href="https://dicos.ru/tag/c.html">C</a><a href="https://dicos.ru/tag/metatrader.html">metatrader</a><a href="https://dicos.ru/tag/wine.html">wine</a></p>
</div>
<div class="sharing">
</div>
<hr>
</section>
<div class="clearfix"></div>
</article>
</div>
<!-- Sidebar -->
<div class="four columns">
</div>
</div>
<!-- Container / End -->
</div>
<!-- Content Wrapper / End -->
<div id="footer-bottom">
<!-- Container -->
<div class="container">
<div class="eight columns">Blog powered by <a href="http://getpelican.com">Pelican</a></div>
<div class="eight columns">
<ul class="social-icons-footer">
<li>
<a href="#" class="tooltip top" title="You can add links in your config file">
<i class="icon-you can add links in your config file"></i>
</a>
</li>
<li>
<a href="#" class="tooltip top" title="Another social link">
<i class="icon-another social link"></i>
</a>
</li>
<li><a href="https://dicos.ru/feeds/all.atom.xml" class="tooltip top" title="RSS"><i class="icon-rss"></i></a></li>
</ul>
</div>
</div>
<!-- Container / End -->
</div>
<!-- Footer Bottom / End -->
<!-- Javascripts -->
<script src="https://dicos.ru/theme/js/jquery.min.js"></script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter14462131 = new Ya.Metrika({
id:14462131,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = "https://mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/14462131" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --> </body>
</html>