Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CopyMemory, CopyMemory 
:(
    Опции темы
_DeMiUrG_
Дата 7.11.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2007

Репутация: нет
Всего: нет



Вообщем вот код на VB массив одномерный всетаки

Код

ReDim DigitByteArray(0 To TrfHeader.cadrl - 1)
  
  ReDim Graph1.DigitX(0 To MaxGraphParam1, 0 To TrfHeader.cadrn)
  ReDim Graph1.DigitY(0 To MaxGraphParam1, 0 To TrfHeader.cadrn)
  
  If Mid(FilePath, Len(FilePath), 1) = "\" Then
     Open FilePath & FileName For Binary As #1
  Else
     Open FilePath & "\" & FileName For Binary As #1
  End If
  
  flag = 0
  DataOff = 1 + 512 * (CLng(TrfHeader.func) + 1)
  
  K = 0
  M = 0
  
  Do While (1)
 
     K = M
     If K >= TrfHeader.cadrn - 1 Then
        K = TrfHeader.cadrn - 1
        flag = 1
     End If
     KadrOff = DataOff + K * CLng(TrfHeader.cadrl)
     Seek #1, KadrOff
     Get #1, , DigitByteArray
     
     For I = -1 To Text2.count - 1
        If I = -1 Then
          J = 1
        Else
          J = val(Text2(I).Text)
        End If
        Select Case User_Func(J).tag
          Case 1, 2
            Call CopyMemory(UserByte.Digit, DigitByteArray(User_Func(J).ofs), User_Func(J).tag)
            UserSingle.Digit = User_Func(J).ak + User_Func(J).vk * UserByte.Digit
          Case 4
            Call CopyMemory(UserSingle.Digit, DigitByteArray(User_Func(J).ofs), User_Func(J).tag)
          Case Else
            Call CopyMemory(UserVariant.Digit, DigitByteArray(User_Func(J).ofs), User_Func(J).tag)
            UserSingle.Digit = User_Func(J).ak + User_Func(J).vk * UserVariant.Digit
        End Select
        
        If I = -1 Then        
          FileTime = UserSingle.Digit
          If M = 0 Then UserMinTime = UserSingle.Digit
          If M = TrfHeader.cadrn - 1 Then UserMaxTime = UserSingle.Digit
        Else
          Graph1.DigitX(I, M) = FileTime - UserMinTime
          Graph1.DigitY(I, M) = UserSingle.Digit
        End If
        
     Next I
     M = M + 1
     If M > constMaxPoint Then
        M = constMaxPoint
        Exit Do
     End If
     If flag = 1 Then Exit Do
  Loop
  Close #1


я переделал вот а такой код 
но вот именно с CopyMemory траблы

Код

  SetLength(DigitByteArray,TrfHeader.cadrl);
  SetLength(Graph1.DigitX,MaxGraphParam1,TrfHeader.cadrn);
  SetLength(Graph1.DigitY,MaxGraphParam1,TrfHeader.cadrn);

  flag:= 0;
  DataOff:= 1 + 512 * (TrfHeader.func + 1);

  K:= 0;
  M:= 0;

assignFile( F,frmMain.OpenDialog1.FileName);
FileMode := 0;
reset( F );

Application.ProcessMessages;
  while not EOF(F) do
  begin
     K:= M;
     If (K >= TrfHeader.cadrn - 1) Then
     begin
        K:=TrfHeader.cadrn - 1;
        flag:=1;
     End;
     KadrOff:= DataOff + K * TrfHeader.cadrl;
     Seek(f,KadrOff);

  blockRead(F,DigitByteArray,sizeof(DigitByteArray));

 //   for i:=0 to high(DigitByteArray) do
// BlockRead(F,pbyte(DigitByteArray[i])^,sizeof(DigitByteArray[i]) );

Application.ProcessMessages;
     For I:= -1 To 13 do                 
      begin

       If (I=-1) Then J:=1  Else
       case I of
       0: J:=17; 1: J:=18; 2:J:=47;  3:J:=46;  4:J:=22;
       5:J:=23;  6:J:=61;  7:J:=62;  8:J:=12;  9:J:=19;
       10:J:=20; 11:J:=32; 12:J:=78; 13:J:=79; 14:J:=73;
        end;

     case User_Func[J].tag of
          1,2:
           begin
           CopyMemory(@UserByte.Digit, @DigitByteArray[User_Func[J].ofs], User_Func[J].tag);
           UserSingle.Digit:=User_Func[J].ak + User_Func[J].vk * UserByte.Digit;
           end;
          4:
          begin
           CopyMemory(@UserSingle.Digit,@DigitByteArray[User_Func[J].ofs],User_Func[J].tag);
          end;
          Else
          begin
            CopyMemory(@UserVariant.Digit, @DigitByteArray[User_Func[J].ofs], User_Func[J].tag);
            UserSingle.Digit:=User_Func[J].ak + User_Func[J].vk * UserVariant.Digit;
          end;  
        End;// Select

     
        If (I = -1) Then
        begin
          FileTime:= UserSingle.Digit;
          If (M = 0) Then UserMinTime:= UserSingle.Digit;
          If (M = TrfHeader.cadrn - 1) Then UserMaxTime:= UserSingle.Digit;
        end
        Else
        begin
          Graph1.DigitX[I, M]:= FileTime - UserMinTime;
          Graph1.DigitY[I, M]:= UserSingle.Digit;
        End;
     end; ///NEXT I

     M:= M + 1;
     If (M > constMaxPoint) Then
     begin
        M:=constMaxPoint;
        Exit;
     End;
     If (flag = 1) Then goto 1;// Do

 frmMain.Label1.Caption:=inttoStr(K + 1);
  end;//do Loop
1:
  closeFile( F ); //Close #1



PM MAIL   Вверх
bems
Дата 10.11.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(_DeMiUrG_ @  7.11.2007,  19:28 Найти цитируемый пост)
blockRead(F,DigitByteArray,sizeof(DigitByteArray));

 //   for i:=0 to high(DigitByteArray) do
// BlockRead(F,pbyte(DigitByteArray[i])^,sizeof(DigitByteArray[i]) );

замени на 
Код

BlockRead(F,DigitByteArray[0],SizeOf(DigitByteArray[0])*length(DigitByteArray));


Цитата(_DeMiUrG_ @  7.11.2007,  19:28 Найти цитируемый пост)
но вот именно с CopyMemory траблы

там их просто становиться заметно
После неправильного чтения массива выражение 
Код

@DigitByteArray[User_Func[J].ofs]
возвращает "мусорный" адрес, а CopyMemory в этой строке
Цитата(_DeMiUrG_ @  7.11.2007,  19:28 Найти цитируемый пост)
CopyMemory(@UserSingle.Digit,@DigitByteArray[User_Func[J].ofs],User_Func[J].tag);
вполне чесно пытается скопировать данные оттуда, куда ее не пускают. Поэтому ты замечаешь ошибку только в этой строке


Это сообщение отредактировал(а) bems - 10.11.2007, 18:03


--------------------
Обижено школьников: 8
PM MAIL   Вверх
_DeMiUrG_
Дата 13.11.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2007

Репутация: нет
Всего: нет



код на делфи работает но цифры считываются не те что на VB

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.