тут покапался внимательней еще раз в справке.. и натолкнулся на
При передаче в DLL массива всегда (независимо от флага AS_SERIES) передается адрес
начала буфера данных. Функция внутри DLL ничего не знает о флаге AS_SERIES,
переданный массив является статическим массивом неизвестной длины, для указания
размера массива используйте дополнительный параметр.
теперь еще вопрос .. как передать адрес начала буфера данный ?
vlad6k:
теперь еще вопрос .. как передать адрес начала буфера данный ?
не парься. он сам передаётся. Синтаксис обычный func(int &var[]), просто при передаче именно в DLL (компилятор сам распознаёт кому параметры передаются) в стек кладётся адрес начала буфера массива (при передаче параметров в mql-функцию - адрес начала описателя массива).
Что-то не туда Вас занесло.
Не надо выгружать dll. Вам это не поможет. И промежуточных dll не надо.
Надо искать ошибку в Вашей dll.
Вы показали как получаете строку, но не показали что Дальше с ней делаете.
Скорее всего ошибка возникает при удалении какого-то объекта.
Это ссылки для ТС. Он вроде бы хочет загружать/выгружать самою длл по желанию. А как сделать более кошерно - можно посмотреть исходники MT4R.dll (слегка неактуально из-за грядущих юникодных веяний в МТ4, но как идея - годится). :)))
пытаюсь в deinit выгрузить принудительно dll через
FreeLibrary(GetModuleHandle("123.dll"));
не получаеться.. почему?
как его ваще можно "убить" програмно
Надо завершить поток. Чтобы его завершить код должен быть выполнен до конца и не быть зацикленным. Выгрузить нельзя при работающем эксперте. Не проверял, но также, наверняка, нельзя выгрузить в индикаторе.
Во всех случаях выгружать нет смысла. Проблема в вашем коде.
всем привет..
тут покапался внимательней еще раз в справке.. и натолкнулся на
теперь еще вопрос .. как передать адрес начала буфера данный ?
https://forum.mql4.com/ru/60752/page2#906538
пытаюсь по написанному сделать на delphi 7 dll .. т.е. сделать промежуточную dll..
но ..но.. я понять не могу .. я ж все равно на dll1 отправляю свой массив .. потом с dll1 передаеться массив на dll2 //
я не могу понять логики.. все равно ж я передаю в первую свой массив.. и таже ошибка должна быть..
Не надо выгружать dll. Вам это не поможет. И промежуточных dll не надо.
Надо искать ошибку в Вашей dll.
Вы показали как получаете строку, но не показали что Дальше с ней делаете.
Скорее всего ошибка возникает при удалении какого-то объекта.
небольшой ликбез с продолжением
строка дальше идет как имя и дочернее имя xml файла.. и все..
благодарю всех кто подсказывает... реально догнать не могу..
пытаюсь в deinit выгрузить принудительно dll через
FreeLibrary(GetModuleHandle("123.dll"));
не получаеться.. почему?
как его ваще можно "убить" програмно
пытаюсь в deinit выгрузить принудительно dll через
FreeLibrary(GetModuleHandle("123.dll"));
не получаеться.. почему?
как его ваще можно "убить" програмно
Надо завершить поток. Чтобы его завершить код должен быть выполнен до конца и не быть зацикленным. Выгрузить нельзя при работающем эксперте. Не проверял, но также, наверняка, нельзя выгрузить в индикаторе.
Во всех случаях выгружать нет смысла. Проблема в вашем коде.