Спасибо большое за то, что потратили на меня время. Открыв Ваш файл, я сразу понял, в чём было дело: у меня в настройках компилировалось под X64... теперь и у меня сразу всё заработало
Максим Пругло: Спасибо большое за то, что потратили на меня время. Открыв Ваш файл, я сразу понял, в чём было дело: у меня в настройках компилировалось под X64... теперь и у меня сразу всё заработало
Поздравляю с успехом. Но зачем C# - делал DLL на Delphi - можно окна с графиками, таблицами, ... Вызываются из MQL как функции
И всё-таки.. да, получилось выполнять численные операции или передавать сторку/массив и так далее. Но сделать что-то посложнее, например, скачать что-то с сайта, обработать с помощью дополнительных
using System.Net с его WebClient wc = new WebClient(); и затем HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
всё это уже вообще никак не работает, хотя должно ведь выполняться внутри DLL, я ведь в итоге обратно в МТ4 возвращаю лишь короткое строковое значение, найденное на сайте
всё это уже вообще никак не работает, хотя должно ведь выполняться внутри DLL
работает
все, что не работает запустите в новом процессе внутри C# - я WinForm так запускал, даже ServiceStack.Redis взлетел под МТ4, правда не с первого раза ;)
блин, а нет возможности пример что ли какой-то или накидать примерно, как это всё сделать)) а то я что-то не уверен, что до конца понимаю вышенаписанное...
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Net;
using HtmlAgilityPack;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.IO;
namespace Test2
{
publicclass Test22
{
privatestatic Thread thr;
privatestaticstring NewsPage="";
[DllExport("SaveSiteText", CallingConvention = CallingConvention.StdCall)]
publicstaticbool SaveSiteText()
{
return procCreator();
}
privatestaticbool procCreator()
{
if (thr == null)
{
thr = new Thread(delegate () { GetSiteInfo("https://ru.investing.com/economic-calendar/"); }); thr.Start();
returnfalse;
}
if(NewsPage == "") returnfalse;
returntrue;
}
privatestaticvoid GetSiteInfo(string NewsLink)
{
WebClient wc = new WebClient(); wc.Encoding = Encoding.GetEncoding("utf-8");
wc.Headers.Add("Host", "ru.investing.com");
wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
wc.Headers.Add("Accept-Language", "ru,en;q=0.9,es;q=0.8");
wc.Headers.Add("User-Agent", @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 YaBrowser/20.8.2.92 Yowser/2.5 Safari/537.36");
NewsPage = wc.DownloadString(new Uri(NewsLink));
File.WriteAllText(@"D:\1\1\1.txt", NewsPage);
}
}
}
И он отказывается работать, зараза.. ну всё ж вроде по подобию сделал, что ж такое... причём специально задержку аж в 5сек поставил, но МТ4 вылетает почти сразу, причём теперь закрывается весь терминал.
Спасибо большое за то, что потратили на меня время. Открыв Ваш файл, я сразу понял, в чём было дело: у меня в настройках компилировалось под X64... теперь и у меня сразу всё заработало
И всё-таки.. да, получилось выполнять численные операции или передавать сторку/массив и так далее. Но сделать что-то посложнее, например, скачать что-то с сайта, обработать с помощью дополнительных
using System.Net с его WebClient wc = new WebClient(); и затем HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
всё это уже вообще никак не работает, хотя должно ведь выполняться внутри DLL, я ведь в итоге обратно в МТ4 возвращаю лишь короткое строковое значение, найденное на сайте
всё это уже вообще никак не работает, хотя должно ведь выполняться внутри DLL
работает
все, что не работает запустите в новом процессе внутри C# - я WinForm так запускал, даже ServiceStack.Redis взлетел под МТ4, правда не с первого раза ;)
Хорошо. Сделал так. Не хочет запускаться))
Хорошо. Сделал так. Не хочет запускаться))
конечно не будет работать -нужно дать время для инициализации .Net - обычно около 0.5 секунд нужно подождать
сделайте некий dllOnInt() - который создаст Вам статические обьекты в отдельном потоке
затем проверяйте, что экземпляры обьектов успешно созданы
затем вызывайте их через обертки в статик функции с экспортом
затем уничтожьте обьекты и закройте поток - тоже нужно подождать около 0.5 сек - проверяйте опрашивая некий флаг
выцарапал из готового -клиент МТ4 для Redis
C#:
MQL4:
Вот весь мой получившийся код:
MQL4:
C#:
И он отказывается работать, зараза.. ну всё ж вроде по подобию сделал, что ж такое... причём специально задержку аж в 5сек поставил, но МТ4 вылетает почти сразу, причём теперь закрывается весь терминал.