Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 5

 
mql5 писал(а)  :

1) какая версия терминала 32 или 64 битная?

2) какая версия dll 32 или 64 битная? 

1) а что есть выбор? По-моему отсюда только x86 скачивается...

2) dll 32 

 

Переустановка MT5 дала следующий результат. При запуске скрипта появляется такая инфа в логе Cannot find function fnCalculateSpeed in 'MQL5DLLSamples.dll'

На всякий случай прикладываю  снимок библиотеки от Dependency Walker. 

  

 
denkir:

Переустановка MT5 дала следующий результат. При запуске скрипта появляется такая инфа в логе Cannot find function fnCalculateSpeed in 'MQL5DLLSamples.dll'

На всякий случай прикладываю  снимок библиотеки от Dependency Walker. 

  

А номер билда переустановленного терминала какой?
 
stringo:
А номер билда переустановленного терминала какой?
По всей видимости старый, явно не последний 240 билд.
 
Renat писал(а)  :
По всей видимости старый, явно не последний 240 билд.

Да, точно не последний...

После обновления до 240-го бильда первый запуск скрипта отработал нормально. Я обрадовался. Но последующие запуски привели только к крашу. Параллельно работал MT 4.

 

 

После перезагрузки вроде всё заработало! :-))

Закомментировал функцию fnCrashTest(int arr) 

 

 

Спасибо всем, кто помогал! 

 
В общем, мне не удалось повысить скорость вычислений с помощью dll более чем в 2.5 раза. Это говорит о высокой скорости MQL5, и для большинства трейдерских задач нет смысла гемороится с dll, за исключением случаев, когда необходимо защитить код, и когда необходимы "тяжёлые" вычисления.
 
joo:
В общем, мне не удалось повысить скорость вычислений с помощью dll более чем в 2.5 раза. Это говорит о высокой скорости MQL5, и для большинства трейдерских задач нет смысла гемороится с dll, за исключением случаев, когда необходимо защитить код, и когда необходимы "тяжёлые" вычисления.

Еще не включена финальная регистровая оптимизация MQL5 - скорость исполнения еще серьезно повысится.
 

Ренат, спасибо за статью. Думаю многим она не раз пригодиться. У меня же попутный вопрос связанный с dll. (Терминал 249, редактор 248)

Пример

Имеем либру demo.dll, в ней всего одна функция

_DLLAPI void __stdcall demo(char *stream, char *buf){ buf=stream;}

 Имеем mql скрипт demo.mq5

#property copyright "2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#import "demo.dll"
void demo(string s1, string &s2);
#import

void OnStart(){
   string a="TEST"; string b;
   demo(a,b);
   Print(b);    
}

Компилятор не выдает ни ошибок, ни предупреждений.

Запускаем в терминале, получаем следующее

 

При проверке в визул дебуге обнаружил еще что в саму функцию demo.dll приходит не строка а ее первый символ.

Вопрос 

В чем проблема? Как по-человечески передать строку из MQL в dll?

 
Используйте wchar_t вместо char