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

 

всем привет..

тут покапался внимательней еще раз в справке.. и натолкнулся на

При передаче в DLL массива всегда (независимо от флага AS_SERIES) передается адрес начала буфера данных. Функция внутри DLL ничего не знает о флаге AS_SERIES, переданный массив является статическим массивом неизвестной длины, для указания размера массива используйте дополнительный параметр.
теперь еще вопрос .. как передать адрес начала буфера данный ?
 
vlad6k:
теперь еще вопрос .. как передать адрес начала буфера данный ?
не парься. он сам передаётся. Синтаксис обычный func(int &var[]), просто при передаче именно в DLL (компилятор сам распознаёт кому параметры передаются) в стек кладётся адрес начала буфера массива (при передаче параметров в mql-функцию - адрес начала описателя массива).
 

https://forum.mql4.com/ru/60752/page2#906538

пытаюсь по написанному сделать на delphi 7 dll .. т.е. сделать промежуточную dll..

но ..но.. я понять не могу .. я ж все равно на dll1 отправляю свой массив .. потом с dll1 передаеться массив на dll2 //

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

 
Что-то не туда Вас занесло.
Не надо выгружать dll. Вам это не поможет. И промежуточных dll не надо.
Надо искать ошибку в Вашей dll.
Вы показали как получаете строку, но не показали что Дальше с ней делаете.
Скорее всего ошибка возникает при удалении какого-то объекта.
 
Да, в DllMain не так всё просто, но не надо бояться. Надо привыкнуть к определённым правилам. Всё будет в порядке.
 
Это ссылки для ТС. Он вроде бы хочет загружать/выгружать самою длл по желанию. А как сделать более кошерно - можно посмотреть исходники MT4R.dll (слегка неактуально из-за грядущих юникодных веяний в МТ4, но как идея - годится). :)))
 
Вы показали как получаете строку, но не показали что Дальше с ней делаете.

строка дальше идет как имя и дочернее имя xml файла.. и все..

благодарю всех кто подсказывает... реально догнать не могу..

 

пытаюсь в deinit выгрузить принудительно dll через

FreeLibrary(GetModuleHandle("123.dll"));

не получаеться.. почему?

как его ваще можно "убить" програмно

 
vlad6k:

пытаюсь в deinit выгрузить принудительно dll через

FreeLibrary(GetModuleHandle("123.dll"));

не получаеться.. почему?

как его ваще можно "убить" програмно

Надо завершить поток. Чтобы его завершить код должен быть выполнен до конца и не быть зацикленным. Выгрузить нельзя при работающем эксперте. Не проверял, но также, наверняка, нельзя выгрузить в индикаторе.

Во всех случаях выгружать нет смысла. Проблема в вашем коде.

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