Файловые операции через WINAPI. Разработчикам - НЕ СМЕШНО !!! - страница 2

 
TheXpert >>:

Сильно сомневаюсь. {...}

void start() {
   int hfile,count,_temp2;
   double _temp3,_temp4,_temp5;
//   string temp1="123456",temp2="1",temp3="123456",temp4="123456789",temp5="123456789";
//-----------------------------
   hfile=_lopen(path+in,0);
   if(hfile!=-1) {
      _llseek(hfile,0,0);
      while(true) {

// ОБЪЯВЛЕНИЕ СТРОК ПЕРЕЕЗЖАЕТ СЮДА
string temp1="123456",temp2="1",temp3="123456",temp4="123456789",temp5="123456789";
// ЗДЕСЬ ПЕЧАТАЕМ ЗНАЧЕНИЯ
Print("После инициализации: temp1 : ",temp1,"; temp2 : ",temp2,"; temp3 : ",temp3,"; temp4 : ",temp4,"; temp5 : ",temp5); 
         count=_lread(hfile,temp1,6);
         if(count==0) break;
         Print("temp1 : ",temp1);
         _lread(hfile,temp2,1);
         Print("temp2 : ",temp2);
         _lread(hfile,temp3,6);
         Print("temp3 : ",temp3);
         _lread(hfile,temp4,9);
         Print("temp4 : ",temp4);   
         _lread(hfile,temp5,9);
         Print("temp5 : ",temp5);    
Print("1 temp1 : ",temp1,"; temp2 : ",temp2,"; temp3 : ",temp3,"; temp4 : ",temp4,"; temp5 : ",temp5); 
      }
      _lclose (hfile);
   }
   return;
}

А Вы проверьте. Распечатайте содержимое переменных temp после инициализации.

 
TheXpert >>:

Сильно сомневаюсь. А как же тогда строки в длл передавать?

Принял указатель, подменил значения, и вся оптимизация посыпалась нахрен, ибо хак, так получается?

Вот и я долго понять не мог, где в трех соснах мог заблудится. (((

 
jartmailru >>:

Короче, кто умный- посмотрит код метатрейдера и напишет генератор рандомных

(можно, кстати, и не рандомных) строк заданной длины под буфера для работы с API! :-)

Чего тут умничать? Я с этими эффектами столкнулся при связи с DLL, так что сделал совершенно тупо:

// Этот маразм обязательно делать только в месте вызова и именно так!
#define MISC_DLL_STRING "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234"


:)

 
Умничать придется :-(.
.
Уважаемый, все проблемы в данном случае начинаются в момент, когда
в Dll нужно обратиться с *несколькими* буферами.
Так вот эти несколько буферов должны инициализироваться разными строками.
Иначе будет нехорошо.
И даже если Вы напишите  
#define D123456 "123456"
string temp1=D123456,temp2="1",temp3=D123456,temp4="123456789",temp5="123456789";

то это никаким образом не исправит положения.

А пример с передачей в Dll измененных строк- как я писал- не работает.

.

А строчечку, ИМХО, Вы сюда зря такую длинную запостили.

 
jartmailru >>:
Умничать придется :-(.
.
Уважаемый, все проблемы в данном случае начинаются в момент, когда
в Dll нужно обратиться с *несколькими* буферами.
Хм... Надо проверить, хотя я так пологал, что #define работает как сишный пропроцессор, а компилятор не настолько умный, чтобы строки объединять... М.б. и ошибся - зада таких у меня не стояло.
jartmailru >>:

А строчечку, ИМХО, Вы сюда зря такую длинную запостили.

Да, ступил. :(

 
jartmailru >>:

А Вы проверьте. Распечатайте содержимое переменных temp после инициализации.

Проверил, убедился. Ппц.

Итого -- изменять строки во внешних модулях -- опасно, всегда есть мизерный, но шанс нарваться на такие неприятности. Спасибо, буду иметь в виду.

Кстати, не вижу смысла в этой оптимизации, совсем.

 
TheXpert >>:

Проверил, убедился. Ппц.

Итого -- изменять строки во внешних модулях -- опасно, всегда есть мизерный, но шанс нарваться на такие неприятности. Спасибо, буду иметь в виду.

Кстати, не вижу смысла в этой оптимизации, совсем.

:-)

Я тоже смысла не вижу. Экономия 200 байт в бинарнике- это выигрыш крайне сомнительный.