А что в логах пишется?
Кстати, передача параметров по ссылке в MQL4 идет по хитрому, не так как в C/C++.
Если используется передача параметра как (int& param), то обработка должна быть соответствующая.
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.
Кстати, передача параметров по ссылке в MQL4 идет по хитрому, не так как в C/C++.
Если используется передача параметра как (int& param), то обработка должна быть соответствующая.
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.
Спасибо за ответ :)
Ух ты оказываеться сколько всяких ньюансов.
Где про них можно почитать? а то как-то в документации по импорту сказано просто импортируйте и все...
Какой именно лог надо смотреть? ни в одном из тех кот. я нашел за день эксперементов я ничего вразумительного не увидел...
С вызовом МессаджБокса сам разобрался... надо было в кач. первого параметра NULL указать...
Я вроде попробовал сделать абсолютно прямолинейную функцию по типу retutn 1 впоследствии... Все равно не помогло...
Ух ты оказываеться сколько всяких ньюансов.
Где про них можно почитать? а то как-то в документации по импорту сказано просто импортируйте и все...
Какой именно лог надо смотреть? ни в одном из тех кот. я нашел за день эксперементов я ничего вразумительного не увидел...
С вызовом МессаджБокса сам разобрался... надо было в кач. первого параметра NULL указать...
Я вроде попробовал сделать абсолютно прямолинейную функцию по типу retutn 1 впоследствии... Все равно не помогло...
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
Логи во вкладке "Эксперты" и "Журнал".
Логи во вкладке "Эксперты" и "Журнал".
Нормально воспринимается в качестве возврата функции из импортированной
DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием?
У меня возвращаются почти исключительно double. Никаких несообразностей
пока что не замечал. Может, я что-то не так делаю?
alexjou:
Извините за ошибку, я имел в виду, что нормально возвращаются обычные типы данных int, bool, double.
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием? У меня возвращаются почти исключительно double. Никаких несообразностей пока что не замечал. Может, я что-то не так делаю?
Можно возвращать int, double, bool, string.
string нужно возвращать как char*.
string нужно возвращать как char*.
RickD:
string нужно возвращать как char*.
string нужно возвращать как char*.
Renat:
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.
И все таки - если нужно возвратить стринг - что делать? Конвертировать
стринг до масив int? Или и так нельзя и нужно до double?
Можно так:
Вот не знаю, strdup для возвращаемой строки нужно делать или нет?
#define EXPFUNC __declspec(dllexport) EXPFUNC char* __stdcall f() { char buf[32]; strcpy(buf, "Hello!"); return buf; } EXPFUNC char* __stdcall f2() { string str = "Hello!"; return (char *)str.c_str(); }
Вот не знаю, strdup для возвращаемой строки нужно делать или нет?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Столкнулся с проблемой, не знаю что делать...
в начале своего кода советника написал:
#import "MetaTraderIface.dll"
string ShowMessage(int& param);
#import "user32.dll"
int MessageBoxA(int hWnd ,string szText,string szCaption,int nType);
потом в init написал
int t = 1;
Alert(ShowMessage(t));
int i = MessageBoxA(0,"test","test",0);
в итоге не вызываеться ни одна ни вторая ф-ция...
Флажок про разрешения импорта стоит.
пробовал пихать в старт --- все равно никакого эффекта.