Можно и так:
var
StrBuff:String;
begin
StrBuff:=pchar(PassString);
Работает тоже стабильно.
как в mql4 получить строку из dll ?
я делаю через массивы int Test(double& aa[], int& bb[], string& val[]);
так вот double и int нормально получаю, а string упирается ни в какую не хочет
Test(aa, bb, val); // делаю обращение к dll
Symb=val[0]; // должны получить
lot=aa[0];
oper=bb[0];
по идее мне надо передать в dll массив строк, а возвращать достаточно только одну
возвращать строку получается через результат функции, то есть если писать описать string Test(double& aa[], int& bb[], string& val[]);
и в скрипте получать результат выполнения, тогда работает
а засунуть в dll массив строк пока тоже не получается. сама dll работает нормально, я ее проверяю тестовой программкой для получения данных, все отлично отрабатывает
ДА мне осталось чуть чуть доделать, переходить на си++ уже не охота.
Вобщем у меня строки передаются, но как-то странно через одну, то есть должны передаться шесть строк(я ими заполняю combobox), а передаются всего три, каждая через пустую
код простой, в dll из скрипта передается массив из 6 строк val[] и этими строками должен заполнится combobox
и как я уже сказал, он заполняется, но вставляет зачем то пустую строку после каждой строки, откуда берется пустая строка, не понимаю
хотя точнее сказать передаются 12 строк, я сделал цикл до 11 и получил все свои строки из скрипта, но они почему-то чередуются пустыми
словно каждая строка состоит из двух. как вариант можно конечно удалить все пустые строки потом, но причина глюка мне непонятна
Form1.combobox1.Clear; i:=5; for k := 0 to i do Form1.ComboBox1.Items.Add(val[k]); Form1.comboBox1.ItemIndex:=0;
Смотрите пример dllSample.
Строка в массиве передается как структура, в сэмпле есть ее описание.
мм, смотрел но не совсем понял
попробовал передать массив описанный как string strarray[6]={ "first", "second", "third", "fourth", "fifth" };
все равно тоже самое, наверное просто буду удалять пустые строки
проблема наверное гдето в дельфях, что-то там лишнее считывается видимо
мм, смотрел но не совсем понял
попробовал передать массив описанный как string strarray[6]={ "first", "second", "third", "fourth", "fifth" };
все равно тоже самое, наверное просто буду удалять пустые строки
проблема наверное гдето в дельфях, что-то там лишнее считывается видимо
В свое время тоже бился над этой проблемой, решил ее криво, но суть заключалась в передаче массива символов
понятно, сделал в общем перед добавлением в combobox проверку на пустую строку, и в общем-то добился чего хотел..
но цикл надо делать в два раза больше, то есть для 6 передаваемых строк надо 12 раз обрабатывать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем доброго времени суток!!!
Сам некоторое время мучался с подобной проблемой.
Выкладываю устойчиво работающее решение, возможно кому-то и пригодится.
И так...
Из MQL строку передаем стандартно, а вот в dll на Delphi принимаем следующим образом.
function FunctionName(const PassString: PChar): какой-то тип данных;
var
StrBuff: ShortString;
begin
StrBuff:=ShortString(PassString);
//далее можно извращаться и делать с этой строкой все что заблагорассудится
//делаем свои дела с StrBuff
end;