Разработана библиотека функций API для MetaTrader 4 - страница 7

 
Добрый день, значит я посоветовался с знакомым программистом, и он мне объяснил что если эта ДЛЛ была написана специально не для использования в Омеге то и гарантии функциональности быть не может. Потому что Омега может не иметь тех ресурсов которые нужны в параметрах вызова функций ДЛЛ. Приведу пример :
int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim);
в этой строке данные типа "TDateTime *tim" Омегой не поддерживаются.
То есть работают пока только функции старта и финиша терминала, те где не задаются параметры. Там где задаются параметры нужно знать какие именно параметры принимает ДЛЛ, неплохо было бы иметь примеры.
Думаю придётся смотреть пример на Дельфи с программистом он сможет сказать что там именно надо, а потом искать средства Омеги для поставки ДЛЛ необходимых параметров. Если бы ВЫ захотели выпустить версию ДЛЛ специально для Омеги то это бы неизмеримо облегчило её быстрое тестирование и использование, думаю пользователей нашлось бы немало именно с Омегой. Заинтересованные уже есть. Прилагаю маленькую вытяжку из Хелпа Омеги:
Важный момент список поддерживаемых типов данных см. ниже.



Определение Функции DLL

Прежде, чем Вы сможете вызвать функцию DLL от EasyLanguage, Вы должны объявить DLL с использованием DLL инструкции Function Declaration.

Синтаксис:

DefineDLLFunc: "DLLNAME.DLL", Return Type, "FunctionName", Parameters;

DLLNAME.DLL - имя DLL, где функция постоянно находится, Return Type - тип выражения, которое функция возвратит, FunctionName - имя функции как определено в DLL, Parameters - список параметров, ожидаемых функцией (каждый параметр, отделенный запятой).

Очень важно помнить, что 32-разрядные DLLs используют экспортируемые объявленные функции с учетом регистра, используя _cdecl, stdcall, или fastcall. Для DLLs, чтобы быть совместимым с EasyLanguage, экспортируемые функции должны быть созданы с использованием прописных букв и должны объявлены как _stdcall. Эти экспортируемые функции должны быть перечислены в пределах раздела EXPORTS .DEF файла DLL. Использование "_declspec (dllexport)" от прототипа функции недостаточно для EasyLanguage, чтобы определить местонахождение экспортируемых функций DLL.

Например, следующая инструкция объявляет функцию по имени MessageBeep, которая постоянно находится в DLL по имени USER32.DLL. Она возвращает булево (истинное/ложное) значение и ожидает один параметр, int.

DefineDLLFunc: "USER32.DLL", bool, "MessageBeep", int;

Data Types

EasyLanguage поддерживает множество типов достоверных данных, которые могут использоваться, чтобы посылать и получать информацию к функциям, содержавшимся в DLLs. Ниже - список типов данных, поддерживаемых EasyLanguage:

Фундаментальные типы данных:

BYTE
1 byte integer data type.

char
1 byte integer data type.

int
4 byte signed integer data type.

WORD
2 byte unsigned integer data type.

long
4 byte signed integer data type.

DWORD
4 byte unsigned integer data type.

float
4 byte floating point data type.

double
8 byte floating point data type.

BOOL
4 byte boolean data type.




Варианты:


UNSIGNED LONG
Same as DWORD.

VOID
Means "No returned value".

Типы указателей:


LPBYTE
Pointer to a BYTE.

LPINT
Pointer to an int.

LPWORD
Pointer to a WORD.

LPLONG
Pointer to a LONG.

LPDWORD
Pointer to a DWORD.

LPFLOAT
Pointer to a float (in float FAR).

LPDOUBLE
Pointer to a double (in double FAR).

LPSTR
Pointer to a char.


Все указатели - 32-разрядные указатели, и EasyLanguage обрабатывает каждого из них тем же самым способом.

Также, очень важно помнить, что все значения в EasyLanguage - плавающие, кроме значений Open, High, Low and Close, которые являются целыми числами. Чтобы управлять этими ценами, Вы должны послать функции ценовой масштаб символа, который составляет график.

Например, если бумага имеет ценовой масштаб 1/1000, а окончательная цена была 105.125, эту цену будут посылать DLL как 105125. Для DLL, чтобы знать, как читать эту цену, Вы должны послать значение в зарезервированном слове PriceScale, которое в этом случае возвращает значение 1 000.
 
Омега может не иметь тех ресурсов которые нужны в параметрах вызова функций ДЛЛ. Приведу пример :
int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim);
в этой строке данные типа "TDateTime *tim" Омегой не поддерживаются.

Теперь все понятно. Для обхода данной проблемы попробуйте указать в Омеге вместо TDateTime тип double - т.е. int TikKot(char, double, double, double);
На самом деле эти типы легко взаимозаменяются и используют по 8 байт памяти. Удачи!
 
Хорошо, спасибо. А как быть с типом "char" , Омега требует Numeric, а ДЛЛ нужен текст? Можно ли его заменить ?
 
Хорошо, спасибо. А как быть с типом "char" , Омега требует Numeric, а ДЛЛ нужен текст? Можно ли его заменить ?

Зчем? Ведь в описании есть:
LPSTR
Pointer to a char.

Это тоже самое. А в документации Омеги есть примеры для этих типов переменных? Нужно там внимательно посмотреть похожие варианты. Удачи!
 
Добрый день, нашёл проблему:
Вот из хелпа про вызов ДЛЛ:

Note: 32-bit DLLs use case-sensitive exported functions declared using _cdecl, _stdcall , or fastcall. For DLLs to be compatible with EasyLanguage, exported functions should be created using all uppercase letters and be declared as _stdcall. These exported functions must be listed within the EXPORTS section of the DLL's .DEF file. Using "_declspec (dllexport)" from the function's prototype is not sufficient for EasyLanguage to locate a DLL's exported functions.

Значит здесь говорится о том что Омега работает только с теми Функциями которые написаны БОЛЬШИМИ БУКВАМИ. Я проверил как написано в другой ДЛЛ, действительно только БОЛЬШИМИ БУКВАМИ.
Если Вы измените вызов Функций (названия большими Буквами) то тогда можно будет тестировать дальше.
Лично я очень заинтересован в Вашем продукте и моя к Вам просьба подогнать ДЛЛ под Омегу. Надеюсь получится... успехов!
Если Вы не хотите тогда напишите здесь пожалуйста, придётся работать над другим решением автоматизации торговли. Спасибо.
 

Если Вы измените вызов Функций (названия большими Буквами) то тогда можно будет тестировать дальше.
Лично я очень заинтересован в Вашем продукте и моя к Вам просьба подогнать ДЛЛ под Омегу. Надеюсь получится... успехов!

Я сделал вариант с большими буквами функций и отправил его на Ваш ящик. Удачи!
 
Большое спасибо, буду тестировать, результаты выложу.