Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот Вам Делфи-код для передачи в dll вещественного числа, отброса дробной части и возврата целочисленной части числа. Это не строковые параметры, но код вполне работает и терминал с ним дружит. Посмотрите, мож что-то увидите в нём для себя.
И вообще, по-моему Вы привели не полный код своей библиотеки. Как минимум отсутствует название библиотеки, объявление о том, что это именно библиотека, не объявлены модули uses и отсутствуют директивы компилятору.
Т.е. передавать массив целых чисел (Integer) ASCII кодов?
Но в MQL нет функции преобразования символа в ASCII код.
drknn
И вообще, по-моему Вы привели не полный код своей библиотеки. Как минимум отсутствует название библиотеки, объявление о том, что это именно библиотека, не объявлены модули uses и отсутствуют директивы компилятору.
Вот заголовок библиотеки:
library sendmsg;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
{$R *.res}
Вряд ли это проблемы с ДЛЛ, скорее с выделением памяти с MQL.
Попробую передавать строку, как посоветовал Kos, но займусь этим на следующей неделе.
Огромное спасибо всем кто откликнулся на призыв о помощи, когда все заработает отпишусь...
Возвращаясь к напечатанному......
Наконец-то появилось время продолжить создание эксперта.
Потратил два дня на поиск в данном форуме, а также на форумах по windowsAPI. Информацию собирал по крупицам, что называется по зернышку. Очень много написано по теме как передать строку из МТ4 во внешнее приложение, но нигде не нашел оформленных законченных программных блоков.
Решил передавать строки через Атомы. На мой взгляд это достаточно просто и не приходится использовать внешние DLL. Отсутствие DLL-посредника должно ускорить процесс передачи данных, ИМХО...
Привожу рабочий код для отправки строки из МТ4 в приложение написанное на Делфи, форма имеет заголовок "Form2". Может кому из новичков и пригодится, чтобы не тратить много времени на изучение и реализацию данной тематики.
1. Код для отправки строки из МТ4. Реализован через Атомы.
#property copyright "Copyright © 2009, CamoZZi Software Corp."
#include <WinUser32.mqh>
#define WM_USER 0x0400
#import "kernel32.dll"
string GlobalFindAtomA (string lpString);
int GlobalGetAtomNameA(int nAtom, string lpBuffer, int nSize);
int GlobalAddAtomA (string lpString);
int GlobalDeleteAtom (int nAtom);
//----------------------------------------------------------
int init()
{
string SendData = "Строка символов для обработки внешним приложением";
int Atom = GlobalAddAtomA(SendData); //Функция возвращает порядковый номер, созданного атома
int hwnd=FindWindowA(null,"Form2"); // Ищем Handle для FORM2 - Делфи приложение
SendMessageA(hwnd,WM_USER,0,Atom); // Передаем порядковый номер атома, в FORM2 - Делфи приложение
GlobalDeleteAtom (Atom); // Удаляем атом.
return(0);
}
2. Код для получения строки в приложении на Делфи.
unit Unit2;
interface
uses
Windows, Messages, Classes, SysUtils, Graphics, Controls, StdCtrls, Forms, Dialogs, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls;
private
{ private declarations }
procedure WMUser (var Msg: TMessage); message WM_USER;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.WMUser(var Msg: TMessage);
var
nAtom,LParam:integer;
p:PChar;
begin
GetMem(p, 256);
nAtom:=Msg.LParam; //Порядковый номер атома, переданного из МТ4
GlobalGetAtomName(nAtom,p,255); //получить строку p, по номеру атома nAtom
Edit3.Text:=p;
FreeMem(p);
end;
Замечания и предложения по оптимизации кода выслушаю внимательно. :-)
Неплохо . Если просто передавать строку,то пойдёт. Если передавать большой поток всякой информации от разных советников можно заблудиться в сообщениях.
Я использовал FileMapping работающий через DLL. Примерно это выглядит так.
Создаёшь FM для индикаторов туда складываются все значения индикаторов от советников на разных символах.
Потом FM для управления,через него открываешь и закрываешь позиции на разных графиках.
Можно ещё и ещё для разных целей. В итоге получается достаточно сильная система,всё работает очень быстро и возможности анализа ограниченны только возможностью программера
Желаю успехов.
Неплохо . Если просто передавать строку,то пойдёт. Если передавать большой поток всякой информации от разных советников можно заблудиться в сообщениях.
Я использовал FileMapping работающий через DLL. Примерно это выглядит так.
Создаёшь FM для индикаторов туда складываются все значения индикаторов от советников на разных символах.
Потом FM для управления,через него открываешь и закрываешь позиции на разных графиках.
Можно ещё и ещё для разных целей. В итоге получается достаточно сильная система,всё работает очень быстро и возможности анализа ограниченны только возможностью программера
Желаю успехов.
Я не планировал передавать большие объемы. Но за совет использовать FM для больших объемов, спасибо, приму к сведению. Основной объем информации обрабатывается экспертом, во внешнюю программу выдаются лишь результаты работы эксперта. Язык MQL дает для этого достаточно большие возможности, для программирования, обработки данных и автоматизированной торговли. Пользуясь случаем хотелось выразить благодарность создателям MQL, в большинстве торговых платформ ничего подобного даже рядом нет.
zhuki: Спасибо за пожелания успехов!