Пытаюсь осилить работу с реестром, накидал простенький советник для теста. Чтение данных из системного реестра проходит без проблем, а вот с записью возникают проблемы, происходит креш МТ и памяти... (((
Может у меня уже глаз замылился и я не вижу очевидного...
Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.
Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.
Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(
Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(
. ... Rick D. ... .: Я тут немного подшаманил ваш пример.
Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))
Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))
Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.
Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры. Может еще какие другие отличия найдете.
Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.
Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры. Может еще какие другие отличия найдете.
Я увидел все отличия))) Большое спасибо!
Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?
Верно. Данных может быть больше. Для больших данных правильно сначала запрашивать длину, потом динамически изменять размер массива, затем уже получать все данные.
. ... Rick D. ... .: Верно. Данных может быть больше. Для больших данных правильно сначала запрашивать длину, потом динамически изменять размер массива, затем уже получать все данные.
Хм... вероятно я не совсем внимательно смотрел API, но не заметил такой функции.... А было бы скорее всего удобно.
Может еще подскажете... возможно вопрос слишком .. нелепый... Как число, например double, перевести в массив char? То есть в некоторых API требуется передавать числа в виде указателя. Указатели передаются в виде одномерных массивов... Со строками понятно, для них предусмотрены функции StringToShortArray и StringToCharArray, а вот с числами я пока не понял как их переводить в байтовые массивы (char).
Хм... вероятно я не совсем внимательно смотрел API, но не заметил такой функции.... А было бы скорее всего удобно.
Может еще подскажете... возможно вопрос слишком .. нелепый... Как число, например double, перевести в массив char? То есть в некоторых API требуется передавать числа в виде указателя. Указатели передаются в виде одномерных массивов... Со строками понятно, для них предусмотрены функции StringToShortArray и StringToCharArray, а вот с числами я пока не понял как их переводить в байтовые массивы (char).
Далеко пожалуй ходить не будем. Рассмотрим работу с реестром. В реестр можно помещать как строчные величины, так и числовые (не в виде строки). Передачу в реестр числа и получение обратно указателя на него происходит посредством массивов (согласно Вашему исправлению). Такой пример подойдет?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Коллеги, помогите разобраться.
Пытаюсь осилить работу с реестром, накидал простенький советник для теста. Чтение данных из системного реестра проходит без проблем, а вот с записью возникают проблемы, происходит креш МТ и памяти... (((
Может у меня уже глаз замылился и я не вижу очевидного...
Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.
Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.
Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(
Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(
Я тут немного подшаманил ваш пример.
Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))
Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))
Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.
Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры.
Может еще какие другие отличия найдете.
Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.
Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры.
Может еще какие другие отличия найдете.
Я увидел все отличия))) Большое спасибо!
Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?Я увидел все отличия))) Большое спасибо!
Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?Верно. Данных может быть больше. Для больших данных правильно сначала запрашивать длину, потом динамически изменять размер массива, затем уже получать все данные.
Хм... вероятно я не совсем внимательно смотрел API, но не заметил такой функции.... А было бы скорее всего удобно.
Может еще подскажете... возможно вопрос слишком .. нелепый... Как число, например double, перевести в массив char? То есть в некоторых API требуется передавать числа в виде указателя. Указатели передаются в виде одномерных массивов... Со строками понятно, для них предусмотрены функции StringToShortArray и StringToCharArray, а вот с числами я пока не понял как их переводить в байтовые массивы (char).
Хм... вероятно я не совсем внимательно смотрел API, но не заметил такой функции.... А было бы скорее всего удобно.
Может еще подскажете... возможно вопрос слишком .. нелепый... Как число, например double, перевести в массив char? То есть в некоторых API требуется передавать числа в виде указателя. Указатели передаются в виде одномерных массивов... Со строками понятно, для них предусмотрены функции StringToShortArray и StringToCharArray, а вот с числами я пока не понял как их переводить в байтовые массивы (char).
Может какой-то пример?
Далеко пожалуй ходить не будем. Рассмотрим работу с реестром. В реестр можно помещать как строчные величины, так и числовые (не в виде строки). Передачу в реестр числа и получение обратно указателя на него происходит посредством массивов (согласно Вашему исправлению). Такой пример подойдет?