импорт из DLL

 
Всем доброе время суток.
Столкнулся с проблемой, не знаю что делать...

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

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

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

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

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

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

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

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

Я вроде попробовал сделать абсолютно прямолинейную функцию по типу retutn 1 впоследствии... Все равно не помогло...
 
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
Логи во вкладке "Эксперты" и "Журнал".
 
в логах пишеться не могу загрузить name.dll (error 126)
 
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием? У меня возвращаются почти исключительно double. Никаких несообразностей пока что не замечал. Может, я что-то не так делаю?
 
alexjou:
Нормально воспринимается в качестве возврата функции из импортированной DLL только int.
А double? То есть для дробных чисел надо делать арифметику с масштабированием? У меня возвращаются почти исключительно double. Никаких несообразностей пока что не замечал. Может, я что-то не так делаю?
Извините за ошибку, я имел в виду, что нормально возвращаются обычные типы данных int, bool, double.
 
Можно возвращать int, double, bool, string.
string нужно возвращать как char*.
 
RickD:
string нужно возвращать как char*.
Renat:
Да еще импортируемая из DLL функция возвращает string, что совершенно невозможно.
string - это внутренний тип данных MQL4 и его никто не имеет права создавать(выделять память) вне штатных функций MQL4.
Даже если сформировать и подсунуть совместимый тип string, то его судьба совершенно непредсказуема.
 
И все таки - если нужно возвратить стринг - что делать? Конвертировать стринг до масив int? Или и так нельзя и нужно до double?
 
Можно так:

#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 для возвращаемой строки нужно делать или нет?
Причина обращения: