Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1. Вообще-то имя функции не lstrcat, а lstrcatA (либо lstrcatW).
2. Но использование конкатенации строк для того чтобы получить адрес переменной - это очень не рациональный способ. Я бы даже сказал, очень глупый способ. Во-первых, тратятся ресурсы на выполнение ненужной операции. Во-вторых, надо всегда следить, чтобы размер выделенной памяти для первой строки был достаточным для вмещения обеих строк (нуль-терминатных). В противном случае огребёшь проблем.
3. Я использую для этих целей функцию int CharPrevA(string lpszStart,string lpszCurrent) из библиотеки "user32.dll". В обоих параметрах указываешь одну и ту же строковую переменную, и на выходе получаешь адрес этой переменной: address=CharPrevA(mystring,mystring);
1. Не надо умничать! Хотите сказать, что как написано у меня работать не будет? Не найдет функцию lstrcat ? А вы, вообще, пробовали исполнять мои скрипты ? Или вы просто "теоретик" ?
2. Чтобы не выглядеть глупым не пишите больше таких вещей. Во-первых, эти фразы - еще одно доказательство, что вы брякнули "чисто теоретически", не глядя в исходники моих скриптов и не зная "как же там эта функция используется". Во-вторых, никаких ресурсов не тратится вовсе. Функция получает такие параметры, при которых ей нечего делать.
3. А вот это единственная полезная информация из вашего сообщения. CharPrev - действительно подходящая для такого "приведения типов" функция.
.
Справедливости ради хочу написать также, что lstrcat все же немного более "тяжелая" функция. Она использует код инициализации обработчика исключений и все же пытается выполнить хоть какую-то работу, прежде чем выясняется, что делать нечего. Функция CharPrev - легче и дает реальный выигрыш - 30-50 тактов процессора - десятки наносекунд.
1. Не надо умничать! Хотите сказать, что как написано у меня работать не будет? Не найдет функцию lstrcat ? А вы, вообще, пробовали исполнять мои скрипты ? Или вы просто "теоретик" ?
2. Чтобы не выглядеть глупым не пишите больше таких вещей. Во-первых, эти фразы - еще одно доказательство, что вы брякнули "чисто теоретически", не глядя в исходники моих скриптов и не зная "как же там эта функция используется". Во-вторых, никаких ресурсов не тратится вовсе. Функция получает такие параметры, при которых ей нечего делать.
3. А вот это единственная полезная информация из вашего сообщения. CharPrev - действительно подходящая для такого "приведения типов" функция.
.
Справедливости ради хочу написать также, что lstrcat все же немного более "тяжелая" функция. Она использует код инициализации обработчика исключений и все же пытается выполнить хоть какую-то работу, прежде чем выясняется, что делать нечего. Функция CharPrev - легче и дает реальный выигрыш - 30-50 тактов процессора - десятки наносекунд.
Вы ведёте себя как обиженный ребёнок. Я разве переходил на личности? Высказывал что-то конкретно в ваш адрес? Я высказал конструктивную критику предложенного вами способа и не более. Поэтому впредь потрудитесь следить за языком и не переходить на личности.
Насчёт того что функция lstrcat не будет работать без постфикса A или W - в этом я ошибся, признаю. Но это не суть.
Я привёл уже готовые рабочие примеры, которые использую сам в своих программах, поэтому давайте не будем говорить "о теоретиках".
А вот что касается ваших скриптов, вы упомянули только названия файлов. А сами то файлы где? Мы не телепаты. Так откуда нам знать, какие вы там параметры передаёте в функцию?
Могу предположить, что вы в качестве одного из параметров вы передаёте пустую строку или неициализированную. Так? Неужели трудно было просто сказать об этом? Зачем ссылаться на какие-то скрипты? Ведь речь идёт всего об 1-2 строчках кода.
А по поводу скорости работы вашего варианта, вы делали какие-то замеры или просто чисто теоретически предполагаете? Попробуйте передать туда строку длиной скажем 500 Мб. Какова будет скорость исполения? Ведь функции придётся просканировать 500 Мб памяти, в поисках нуля. Или если вторая строка нулевой длины, то сканирования не будет?
В общем... если у функции стоит аргумент int, то это означает, что туда "войдет":
- int, стандартная ширина 4 байта
- любой массив- т.к. он передается адресом- т.е. передается 4-байтовый указатель
- строка, т.к. она опять же передается указателем
Вопрос в том, что указателя в мокле нет, а потребность передавать в SendMessage
как int, так и string / массивы- есть.
указатель на строку можно получить, закинув в dll (см. pointer.dll) функцию (в "переводе" на MQL) вида
а в экспорте описать ее
По поводу передачи массива - не нашел в справочнике нужное место с описанием, но, наверное, тем же самым способом можно получить и его указатель.Вы ведёте себя как обиженный ребёнок.
...
Так откуда нам знать, какие вы там параметры передаёте в функцию?
Впредь, будьте осторожны со словами.
Вы в чей-нибудь профиль хоть раз заглядывали?
О как!
А что у нас с профилем?