Предложение по доработке функции DoubleToStr - страница 3

 
xnsnet, я внёс предложенные Вами изменения в обе функции: GetSystemLocale и GetUserLocale. Теперь при многократных вызовах этих функция возвращаются нормальные значения. Новую версию библиотеки b-Locale.mqh перезалил на старое место.

xnsnet, ещё раз благодарю. Ваша поправка весьма существенна!
 

Всегда рад помоч:) Вам так же спасибо за проявленный интерес к моему вопросу:) По крайней мере я нашел для себя выход в том чтобы не создавать промежуточную память между управляемой средой и скриптом MQL, а использовать буфер внутри, конечно это еще спорно, что лучше, но тем нее менее, это выход.

Хорошо, буду постить, хотя редактирование позволяет сократить используемое пространство темы:)

 
В связи со всем этим я могу сказать много чего, я сам протестировал такие подходы, память управляется терминалом и действительна только та строка которая объявлена. В обоих примерах не создастся тысяча строк, а будет использовано только две строки, третяя выгружается. И для создания буфера строки вполне применим такой способ. Раз нет иного способа разметить память для своих нужд в среде MQL, это самый подходящий. Но это проще чем размечать промежуточную память для передачи данных в обратную сторону, а потом ее выгружать с помощью контекста, но намного быстрее в своем контексте.

int start() { string test = ""; int index = 0; while( true ) { test = test + "0123456789"; index++; } return(0); }
 
int start() { string test = ""; int index = 0; while( index < 1000 ) { test = test + "0123456789"; index++; } return(0); }
Реально не хватает такой функции как подобия stackalloc аналогично C# было бы гораздо проще пользоваться памятью в терминале из вне и не вытаскивать палки из колес, с одним исключением, чтобы память была распределена из кучи. Но в связи с тем, что используются нулевые окончания это выбивается из стандартов языка. Хотя честно говоря я эти стандарты не очень понимаю, ANSI в строках с нулевым окончанием, это жестоко. Мои предпочтения относятся больше к Unicode, да и в .NET это стандарт, из-за которого приходится гонять туда сюда, из анси с нулем в юникод с фиксированной длинной:)

Метод тыка всегда оставался и остается единственным ключем к знанию не раскрытого. А вообще я бы сравнил MQL с языком который сужает возможности, похоже на ограничение, которое используется в целях управления. Не будь таких жестких правил, у меня бы все использование скриптов заканчивалось например на таком коде:

int init() { return(_init()); }
int start() { return(_start()); }
int deinit() { return(_deinit()); }
Хитро продуманный план удался:)
 
xnsnet >>:
В связи со всем этим я могу сказать много чего, я сам протестировал такие подходы, память управляется терминалом и действительна только та строка которая объявлена. В обоих примерах не создастся тысяча строк, а будет использовано только две строки, третяя выгружается. И для создания буфера строки вполне применим такой способ. Раз нет иного способа разметить память для своих нужд в среде MQL, это самый подходящий. Но это проще чем размечать промежуточную память для передачи данных в обратную сторону, а потом ее выгружать с помощью контекста, но намного быстрее в своем контексте.

Реально не хватает такой функции как подобия stackalloc аналогично C# было бы гораздо проще пользоваться памятью в терминале из вне и не вытаскивать палки из колес, с одним исключением, чтобы память была распределена из кучи. Но в связи с тем, что используются нулевые окончания это выбивается из стандартов языка. Хотя честно говоря я эти стандарты не очень понимаю, ANSI в строках с нулевым окончанием, это жестоко. Мои предпочтения относятся больше к Unicode, да и в .NET это стандарт, из-за которого приходится гонять туда сюда, из анси с нулем в юникод с фиксированной длинной:)

Метод тыка всегда оставался и остается единственным ключем к знанию не раскрытого. А вообще я бы сравнил MQL с языком который сужает возможности, похоже на ограничение, которое используется в целях управления. Не будь таких жестких правил, у меня бы все использование скриптов заканчивалось например на таком коде:

Хитро продуманный план удался:)
 
string FloatToStr(double value, int digits){
   int r;
   r = MathPow(10,digits);
   r = MathMod((value*r),r);
   return(DoubleToStr(value,0)+","+DoubleToStr(r,0));
}