delphi dll + mt4 + новый билд - страница 3

 
Криво написана? Да, похоже на то.
 

TheXpert


...я понимаю что вы разбираетесь о чем говорите и как можно это сделать.. не проще было бы показать..


я тоже не рекламирую что пишу нейронные сети. думаю кто- то кто разбирается реально сможет показать.. ща проверю последний показанный метод...

 
vlad6k:

Я на делфи лет 10 не писал, я не знаю как православно работать там с массивом, поэтому не могу подсказать, только по симптомам диагноз поставить.

Не должно ядро так жраться и дллка висеть.

Так что разбирайтесь сами или подождите пока дельфисты подтянутся. Статьи попробуйте поискать, вроде были.

 

кто-нибудь подскажите, как сейчас передать массив строк из совы в DLL

на прежних билдах передавал указатели на строки

void data(string& val[]);

в библиотеке принимаю как String (PСhar не хочет работать, метатрейдер вылетает)

сейчас все работает, но передается только первая буква строки.. то есть вроде бы передается указатель на строку, но обработать этот указатель в дельфях уже не могу

или не знаю как, терминал рушится, когда пытаюсь работать с PChar

 

Переходи на С++

Я тоже долго маялся с паскалем, пока не принял волевое решение.

 

перейду, если покажете простой рабочий пример передачи строки из mql4 в dll и обратно

хотя тут проблема может и не в дельфях, я не понимаю что и как сейчас передает mql..

версия советника со старого компилятора работает и со String и с PChar, все корректно принимается, а что сделали в новом билде не понятно

 
Debugger:

Переходи на С++

Я тоже долго маялся с паскалем, пока не принял волевое решение.


опять изучать.. я скоро все языки пройду.. асталось ассемблер подучить..


чем лучше с++ ?

 
harbor:

перейду, если покажете простой рабочий пример передачи строки из mql4 в dll и обратно

хотя тут проблема может и не в дельфях, я не понимаю что и как сейчас передает mql..

версия советника со старого компилятора работает и со String и с PChar, все корректно принимается, а что сделали в новом билде не понятно


насчот нового билда .. обновили без спроса.. аж матюкаться хочеться.. все попереносили на диск с ... dll работала на старом билде..
 
harbor:

кто-нибудь подскажите, как сейчас передать массив строк из совы в DLL

на прежних билдах передавал указатели на строки

void data(string& val[]);

в библиотеке принимаю как String (PСhar не хочет работать, метатрейдер вылетает)

сейчас все работает, но передается только первая буква строки.. то есть вроде бы передается указатель на строку, но обработать этот указатель в дельфях уже не могу

или не знаю как, терминал рушится, когда пытаюсь работать с PChar

На юникод перешли. Теперь WCHAR.

EXPFUNC(BOOL) ParserIsKeyA(LPCSTR szName);  // Раньше так было.
EXPFUNC(BOOL) ParserIsKeyW(LPCWSTR szName); // Теперь так.
 
Zhunko:

На юникод перешли. Теперь WCHAR.

а как это использовать, в длл ловить как-то по другому надо? там вроде советовали передовать структуру, а как на mql структуры передовать чето не понял, через winapi чтоли

делаю в дельфях массив WideChar для приема данных

терминал крашится во врема присвоения данных. разве что попробовать другой дельфи, у меня 2006

----

вроде получилось передать через PWideChar в 2009 дельфях, правда глюки при заполнении массива лезут.. но там попарсить осталось правильно

скорее всего string с mql4 передает структуру данных из трех полей, потому что только одно поле содержит строку, остальные две какие-то данные.

пока не понял как эту структуру раскрыть правильно, но по сути достаточно брать первое поле для заполнения массива.

разрабы вроде писали что структура выглядить так

#pragma pack(push,1)
struct MqlString
{
int size;
LPWSTR buffer;
int reserved;
};
#pragma pack(pop)

----

короче кому интересно все получилось и довольно просто, так что дельфи пока рулит))

объявляю тип данных

 type

   TMqlString = Record
    size:integer;
    buffer: PWideChar;
    res: integer;
   end;

 

 TMyArray=Array[0..10] of TMqlString ; 

 //обьявляю процедуру получения данных

procedure Test(var val: TMyArray); stdcall;

 

 // вызов процедуры в Dll

procedure Test(var val: TMyArray); stdcall; 

var k:integer;
begin

for k := 0 to 10 do  
showmessage(StrPas(val[k].buffer); 

end;


в MQL4 передаю массив: void Test(string& val[]);

все работает вроде бы без глюков.

Причина обращения: