MQL4 - automated forex trading   /  

Форум

импорт из DLL

К списку тем  | 1 2 3 Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
3
Tinedel 17.03.2006 18:25 
Всем доброе время суток.
Столкнулся с проблемой, не знаю что делать...

в начале своего кода советника написал:

#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);

в итоге не вызываеться ни одна ни вторая ф-ция...

Флажок про разрешения импорта стоит.
пробовал пихать в старт --- все равно никакого эффекта.

Организуйте багтрекинг и техсаппорт для своей компании

В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем.


avatar
Модератор
3646
Renat 18.03.2006 00:09 
А что в логах пишется?

Кстати, передача параметров по ссылке в MQL4 идет по хитрому, не так как в C/C++.
Если используется передача параметра как (int& param), то обработка должна быть соответствующая.

Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.

avatar
3
Tinedel 18.03.2006 14:56 
Спасибо за ответ :)
Ух ты оказываеться сколько всяких ньюансов.

Где про них можно почитать? а то как-то в документации по импорту сказано просто импортируйте и все...

Какой именно лог надо смотреть? ни в одном из тех кот. я нашел за день эксперементов я ничего вразумительного не увидел...
С вызовом МессаджБокса сам разобрался... надо было в кач. первого параметра NULL указать...

Я вроде попробовал сделать абсолютно прямолинейную функцию по типу retutn 1 впоследствии... Все равно не помогло...

avatar
Модератор
3646
Renat 18.03.2006 17:25 
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
Логи во вкладке "Эксперты" и "Журнал".

avatar
3
Tinedel 18.03.2006 18:39 
в логах пишеться не могу загрузить name.dll (error 126)

avatar
895
alexjou 19.03.2006 03:44 
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием? У меня возвращаются почти исключительно double. Никаких несообразностей пока что не замечал. Может, я что-то не так делаю?

avatar
Модератор
3646
Renat 19.03.2006 09:15 
alexjou:
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием? У меня возвращаются почти исключительно double. Никаких несообразностей пока что не замечал. Может, я что-то не так делаю?
Извините за ошибку, я имел в виду, что нормально возвращаются обычные типы данных int, bool, double.

avatar
1272
RickD 21.03.2006 03:48 
Можно возвращать int, double, bool, string.
string нужно возвращать как char*.

avatar
Модератор
3646
Renat 21.03.2006 14:33 
RickD:
string нужно возвращать как char*.
Renat:
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.

avatar
1447
Itso 21.03.2006 15:38 
И все таки - если нужно возвратить стринг - что делать? Конвертировать стринг до масив int? Или и так нельзя и нужно до double?

avatar
1272
RickD 23.03.2006 03:33 
Можно так:

#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 для возвращаемой строки нужно делать или нет?
К списку тем   | 1 2 3  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий