Бета-тестирование MetaTrader 5 началось! - страница 99
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На сколько я помню String и PChar совместимые типы (по крайней мере в Delphi).
Привожу таблицу совмещения типов данных Delphi и C++ (взятую из справки Борланда)
Если пишете принципиально на delphi7 то PWideChar Вам в помошь если среда разработки не так принципиально то в delphi 2009 строки по умолчанию unicode
http://www.citforum.ru/programming/delphi/unicode/1.shtml
Вопрос разработчикам:
как избавится то этого эфекта?
Пример кода который использую, выход стохастика за 80 и 20, с 20 проблем нет хотя тоже смноится не ровным отсечением а /===\ ну да ладно, а вот с 80 проблем.
Подскажите как от этого избавится!!!
Уважаемые разработчики, откройте секрет при помощи чего компилировался пример DLL для MT4.
Перепробовал почти весь арсенал который у меня на компе стоит (только Delphi 2009 осталось испробовать), не удается корректно передать/получить обычную строку из DLL.
Если можно обновите плиз пример для MT5.
Желательно еще пополнить типы данных отвечающие за строки (ну иди каким-то образом дать возможность переделывать ANSI в Unicode и обратно).
PS
Для удобства понимания можно будет к примеру оставить за string старый формат (ANSI), а для нового добавить UnicodeString.
А в набор функций работы с тексом добавить две функции UnicodeToString и StringToUnicode.
PS
Для удобства понимания можно будет к примеру оставить за string старый формат (ANSI), а для нового добавить UnicodeString.
А в набор функций работы с текстом добавить две функции UnicodeToString и StringToUnicode.
При помощи Borland C++ Builder 6 я всеж смог создать пример для DLL (там кстати возвращается char* - что как я понял из таблицы должно соответствовать PChar).
PS
Хотя код только реализует нормальный возврат переданной из терминала строки (старый пример для MT4)
Желательно как я уже написал выше добавить в терминал две функции по преобразованию ANSI в Unicode.
А как наилучшее решение проблемы немного поправить типы данных (за основу для новых типов можно взять ту таблицу что приводилось мной выше)Уважаемые разработчики, откройте секрет при помощи чего компилировался пример DLL для MT4.
Перепробовал почти весь арсенал который у меня на компе стоит (только Delphi 2009 осталось испробовать), не удается корректно передать/получить обычную строку из DLL.
Если можно обновите плиз пример для MT5.
Желательно еще пополнить типы данных отвечающие за строки (ну иди каким-то образом дать возможность переделывать ANSI в Unicode и обратно).
PS
Для удобства понимания можно будет к примеру оставить за string старый формат (ANSI), а для нового добавить UnicodeString.
А в набор функций работы с тексом добавить две функции UnicodeToString и StringToUnicode.
1. Ещё раз. В MQL5 используются юникодные строки. Читайте справку по MQL5 - там подробно описывается формат
2. DLL для MT4 ничем не отличаются от DLL для MT5. Опять же читайте справку.
PS. Чтобы возвращать строку из функции, нужно обладать высокой квалификацией программиста. Программист высокой квалификации не станет возвращать из функции ничего, кроме элементарных типов (string, как и указатели на память, не является элементарным типом). Все остальные типы, при необходимости, должны возвращаться в параметре функции типа [out], переданногопо ссылке. Если хотите таким (правильным) образом возвратить строку, опять же читайте справку про тип string в MQL5 и почитайте кроме того, как это делается в Windows API
1. Ещё раз. В MQL5 используются юникодные строки. Читайте справку по MQL5 - там подробно описывается формат
2. DLL для MT4 ничем не отличаются от DLL для MT5. Опять же читайте справку.
PS. Чтобы возвращать строку из функции, нужно обладать высокой квалификацией программиста. Программист высокой квалификации не станет возвращать из функции ничего, кроме элементарных типов (string, как и указатели на память, не является элементарным типом). Все остальные типы, при необходимости, должны возвращаться в параметре функции типа [out], переданногопо ссылке. Если хотите таким (правильным) образом возвратить строку, опять же читайте справку про тип string в MQL5 и почитайте кроме того, как это делается в Windows API
Да справку я читал, и еще кучу всего про Юникодину, не очень мне это подходит.
На мой взгляд будет проще все реализовать на уровне терминала (это позволит не привязываться к системам с помощью которых создавались DLL).
На счет DLL для MT4 и MT5 не знаю, но видимо если рассматривать старый пример то они будут схожими (вопрос был чисто технический, поскольку были определенные трудности при работе с MS VC 6, да и размер файла меня не порадовал. В отличии от того что в примере у меня выщло 200 Кб).
Насколько я понимаю работа по API для MQL5 еще не начата, в противном случае компилятор не стал вырубать терминал и материться при любой ошибке.
На счет WinAPI: я привык к работе без Unicode, но код работает при этом без проблем.
Не знаю как это реализовано на MS С++ (тем более при условии юникодности), но вот пример вызова функций WinAPI:
Как видно для общения с Win XP вполне хватает и PChar (в C++ char*. Насколько я понял в MQL этот тип не присутсвует к сожалению), PAnsiChar и PWindeChar
PS
Конечно можно общаться с DLL "правильно" и профеесионально, только при при помощи стандартных типов данных (я про bool, int и double), но хочется чего-то более сложного.
Тут один вопросик возник - а что должна возвращать строка AccountInfoInteger(ACCOUNT_TRADE_MODE)?
Судя по справке возвращать нужно ENUM_ACCOUNT_TRADE_MODE
ENUM_ACCOUNT_TRADE_MODE
Идентификатор
Описание
ACCOUNT_TRADE_MODE_DEMO
Демонстрационный торговый счет
ACCOUNT_TRADE_MODE_CONTEST
Конкурсный торговый счет
ACCOUNT_TRADE_MODE_REAL
Реальный торговый счет
Компилятор вот такое предупреждение выдает "conversion possible loss of data". Это нормально?
билды с 215 по 217
В компиляторе ошибка при расчёте индексов, в случае если содержится умножение внутри квадратных скобок.
Программа компиляется без проблем, однако работает с проблемами // Array out of range ..................
В аттаче полная версия индикатора.
...
Не знаю как это реализовано на MS С++ (тем более при условии юникодности), но вот пример вызова функций WinAPI:
Как видно для общения с Win XP вполне хватает и PChar (в C++ char*. Насколько я понял в MQL этот тип не присутсвует к сожалению), PAnsiChar и PWindeChar
Я сам дельфями не балуюсь, но то, что Вы написали похоже на "MS C++" реализацию, где есть такие типы как TCHAR, LPTSTR и LPCTSTR. Эти типы определяются во время условной компиляции и могут быть скомпилированы как char, char* и const char* в случае ANSI компиляции и unsigned short (соответствует wchar_t), unsigned short* (wchar_t*) и const unsigned short* (const wchar_t*) в случае компиляции Unicode.
Ваш тип PChar соответствует LPCTSTR, PAnsiChar - LPCSTR, PWideChar - LPCWSTR
У Вас в дельфях должна быть опция для компиляции в режиме юникод или просто объявление DEFINE, как ключ для компиляции в Юникод. Поищите и наверняка найдете. Потому что, Ваша функция CopyFile, на самом деле, в Windows не существует. Зато существуют CopyFileA и CopyFileW.
Надеюсь мой пост был полезен.