Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
MasterZivЕсли ты не заметил маленький нюанс, хочу обратить на него внимание. Ты говоришь про функцию RtlMoveMemory , а ссылаешься на документацию по функции MoveMemory . Ты не заметил небольшую разницу в их названии? Это разные функции. Конечно, заметил. Но ведь написано же: авторThis function is defined as the RtlMoveMemory function. А это значит, что: авторЭта функция т.е. MoveMemory определена как функция RtlMoveMemory Я так понимаю, они одинаковые. По сигнатуре и по параметра есс-но, т.к. перегрузок, как выше сказали нет. Я уже понял почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:57 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovhozА вот здесь интересующий меня момент: Код: plaintext 1. 2. Вот хочу понять, как он пришёл к такому выводу вообще.Насколько я понимаю, это фишка конкретно mql - один и тот же экспорт импортирован с двумя разными сигнатурами для удобства использования. Вы трейдер - вам и разбираться, но к плюсам никак не относится. Очень, навряд ли. В мкл вообще ничего своего толком нет, кроме кастомных функций. Я документацию уже перелопатил ни один раз. Слишком всё примитивно там. Тем более, использование это одно, а здесь мы имеем дело с явным вызовом что-ли с разными аргументами. Я вот это сам не понял, до сих пор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:02 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozЯ вот это сам не понял, до сих пор. Ну и забей. Используй стандартные memcpy() или mommove(). Они и портабельны и работают быстрее при некоторой удаче. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:17 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
rdb_devВ таблице экспорта присутствует лишь одна функция RtlMoveMemory и именно она используется для всех этих перегрузок с разными типами. Если внимательно приглядеться, к перегрузкам, то можно заметить, что они представляют из себя перегрузки с разными типами одной и той же функции, которая перемещает количество байт (length): Код: plaintext 1. Иными словами, все эти перегрузки сделаны для удобства написания и восприятия кода. Ничто не мешает сделать свою собственную перегрузку - со своими типами, чтобы не загромождать свой код приведением типов при вызове RtlMoveMemory. Хм. Да, вижу. Но делать перегрузки самому, когда перегрузка является лишь поводом для перестановки аргументов странно. Как-то по мне, это не имеет ни смысла, ни удобства. Ведь Аргументы те же самые. У меня подобное бывает, но это когда есть в конце умолчательные значения, а не так.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:19 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozздесь мы имеем дело с явным вызовом что-ли с разными аргументамиЕсть экспортируемая функция со вполне конкретной сигнатурой. Есть импорт этой функции для использования в другом языке (не C/C++) в этом "другом языке" есть возможность объявить разные сигнатуры для единственного экспорта. Естественно, при условии, что эти сигнатуры фактически эквивалентны . Если внимательно посмотреть, объявленные импорты - эквивалентны. Зачем сделано так - это уже вопрос к использованию функции в MQL. К C/C++, повторю, это всё никак не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:57 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozХм. Да, вижу. Но делать перегрузки самому, когда перегрузка является лишь поводом для перестановки аргументов странно. Как-то по мне, это не имеет ни смысла, ни удобства. Ведь Аргументы те же самые. У меня подобное бывает, но это когда есть в конце умолчательные значения, а не так..Так в mql нет ни нормальных указателей, ни операции получения адреса. Вот и используются перезагрузки для каждого используемого типа. Вы же никак не получите адрес массива в виде числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 18:15 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovhozздесь мы имеем дело с явным вызовом что-ли с разными аргументамиЕсть экспортируемая функция со вполне конкретной сигнатурой. Есть импорт этой функции для использования в другом языке (не C/C++) в этом "другом языке" есть возможность объявить разные сигнатуры для единственного экспорта. Естественно, при условии, что эти сигнатуры фактически эквивалентны . Если внимательно посмотреть, объявленные импорты - эквивалентны. Зачем сделано так - это уже вопрос к использованию функции в MQL. К C/C++, повторю, это всё никак не относится. По сути, да. Я согласен. Один вопрос по этой теме остался. Как вы вообще ориентируетесь в таких моментах? Вот есть по функции RtlMoveMemory документация. Мы видим: Код: plaintext 1. 2. 3. 4. 5. Как я понял, _Out_ это параметр, посредством который будет возвращаться значение в результате отработки функции, а _In_ - параметр, для принятия аргументов. Тут понятно, если я прав. UNALIGNED как я понял из того, что прочитал нужен для передачи указателя, что бы компилятор предположит, что мол указатель будет not aligned . Хотя не понятно, зачем. С типом SIZE_T всё понятно. А вот первые 2 параметра имеют тип VOID. Какм боком того узнать, какой тип передавать? Ведь в приведённом мной примере: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Типы передаются, кроме известного SIZE_T ещё и long и меньше по размеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 18:27 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
BarlonehozХм. Да, вижу. Но делать перегрузки самому, когда перегрузка является лишь поводом для перестановки аргументов странно. Как-то по мне, это не имеет ни смысла, ни удобства. Ведь Аргументы те же самые. У меня подобное бывает, но это когда есть в конце умолчательные значения, а не так..Так в mql нет ни нормальных указателей, ни операции получения адреса. Вот и используются перезагрузки для каждого используемого типа. Вы же никак не получите адрес массива в виде числа. Это да. К тому же все типы не являются наследниками объектов. А это тоже касяк. В Java можно передавать что угодно, потом привести к типу и всё стабильно. А в мкл не вариант. Много касяков, но.. мне нужно проверить некоторые вещи. Сразу перепрыгнуть куда-то ещё сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 18:30 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozКак вы вообще ориентируетесь в таких моментах?Я не ориентируюсь. В данном конкретном случае я воспользовался "презумпцией правильности": раз код (предположительно) рабочий, то (какой-то) смысл в нём есть. Тогда я обратил внимание, что, фактически, все эти сигнатуры эквивалентны "два указателя и число". В качестве первого приближения меня это устроило - я не планирую разбираться в деталях MQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 18:52 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozКак я понял, _Out_ это параметр, посредством который будет возвращаться значение в результате отработки функции, а _In_ - параметр, для принятия аргументов. Тут понятно, если я прав. UNALIGNED как я понял из того, что прочитал нужен для передачи указателя, что бы компилятор предположит, что мол указатель будет not aligned . Хотя не понятно, зачем. С типом SIZE_T всё понятно. А вот первые 2 параметра имеют тип VOID. Какм боком того узнать, какой тип передавать? Ведь в приведённом мной примере: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Типы передаются, кроме известного SIZE_T ещё и long и меньше по размеру.Что значит "какой тип передавать"? У MoveMemory первые два параметра - указатели. Адреса то есть. И копирует она lenth байтов из памяти по второму адресу в память по первому адресу. Что вам надо скопировать, адрес того и нужно передавать. Ссылка на переменную - это как раз адрес. Меня вот больше интересует, откуда там адреса в виде целых значений появляются. Видимо, из какой-то другой api функции, которая указатель возвращает. Костыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 19:08 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
BarloneЧто значит "какой тип передавать"? Он не в курсе что такое "указатели". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 19:21 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovBarloneЧто значит "какой тип передавать"? Он не в курсе что такое "указатели". Конечно, знаю. Их можно разыменовать. Но в мкл нет указателей нормальны. Они там называются так, но, в отличие от С++, они являются так как они называют дексрипторами. А это ограниченная хрень. Я бы назвал недоуказатели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 20:12 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
BarlonehozКак я понял, _Out_ это параметр, посредством который будет возвращаться значение в результате отработки функции, а _In_ - параметр, для принятия аргументов. Тут понятно, если я прав. UNALIGNED как я понял из того, что прочитал нужен для передачи указателя, что бы компилятор предположит, что мол указатель будет not aligned . Хотя не понятно, зачем. С типом SIZE_T всё понятно. А вот первые 2 параметра имеют тип VOID. Какм боком того узнать, какой тип передавать? Ведь в приведённом мной примере: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Типы передаются, кроме известного SIZE_T ещё и long и меньше по размеру.Что значит "какой тип передавать"? У MoveMemory первые два параметра - указатели. Адреса то есть. И копирует она lenth байтов из памяти по второму адресу в память по первому адресу. Что вам надо скопировать, адрес того и нужно передавать. Ссылка на переменную - это как раз адрес. Меня вот больше интересует, откуда там адреса в виде целых значений появляются. Видимо, из какой-то другой api функции, которая указатель возвращает. Костыли. Всё там есть. В другой библиотеке, например, я увидел, где он берёт указатель: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 20:14 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Дальше вот вызов функции и ArrayFromPointer и присвоение указателя: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 20:16 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hoz, что ты в конце концов хочешь узнать? в компутере нет понятия типов, есть только адреса данных. и все эти обертки - они просто это демонстрируют (от слова демон - демонстратор измерений, упс). и все операции копирования с придуманными в mql типами == memcpy == RtlMoveMemory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2018, 00:43 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
NekZMasterZivМанглинг применяесят для функций С++. Функции Windows -- чистые С функции, манглинг там не применяется. Это уже 100 раз сказали выше. А толк был? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2018, 01:15 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozДальше вот вызов функции и ArrayFromPointer и присвоение указателя: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ага, ну вот, sqlite3_column_blob возвращает указатель на данные. В C++ можно было бы работать с данными непосредственно в этом буфере. А в mql приходится их сначала копировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2018, 09:39 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozХм. Да, вижу. Но делать перегрузки самому, когда перегрузка является лишь поводом для перестановки аргументов странно. Как-то по мне, это не имеет ни смысла, ни удобства. Ведь Аргументы те же самые.Почему же не имеет ни смысла, ни удобства? Имеет!... Хотя бы для того, чтобы не расписывать длинные приведения типа, подобно этим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2018, 09:36 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Пардон муа! Как обычно - не проверил. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2018, 10:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39664449&tid=2017828]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 415ms |

| 0 / 0 |
