Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: CopyMemory Lib "kernel32.dll" Alias &quo Добавлено: 16.03.10 02:57  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Столкнулся с такое проблемой.
функция CopyMemory при копировании из одного массива в другой, копирует не всё. Массивы: один байтовый, другой с пользовательским типом(7 байт).

Оба массива задаются Redim'ом. Размеры не превышают 4КБ. Размер точно правильные.
Не хотелось бы перебором/маленькими кусками записывать.

Как решить?

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 16.03.10 04:03
Код в студию

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 16.03.10 06:53
  1. CopyMemory tmpData(0), Data(0,0) , W*H*7

tmpData - байтовый массив
Data - Двумерный массив с пользовательским типом данных

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 16.03.10 16:22
А ты слышал что-нибудь о выравнивании?

Ответить

Номер ответа: 4
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 16.03.10 16:37
подробнее?

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 16.03.10 23:21
Даже если структура имеет длину 7 байт, она почти наверняка не находится в памяти по адресам 0, 7, 14 и т.д., а скорее всего 0, 8, 16 и т.д.

Ответить

Номер ответа: 6
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #6
Добавлено: 16.03.10 23:24
это зависит от типов переменных внутри структуры?

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 17.03.10 00:48
Не знаю поможет ли это, но вот какие изыскания я получил:
  1. Private Type struct
  2.     c1 As Byte
  3. '    c2 As Integer
  4. '    c3 As Long
  5. End Type

LenB=1
  1. Private Type struct
  2.     c1 As Byte
  3.     c2 As Integer
  4.     c3 As Long
  5. End Type

LenB=8

Ответить

Номер ответа: 8
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #8
Добавлено: 17.03.10 01:13
Спасибо. Помогли, я всегда Функцией Len измерял, не думал, что она только для строк правильно работает.
Получилось что размеры идут как-то так: 1, 2, 4, 6, 8, 12, 16. Странная последовательность.

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 17.03.10 01:30
*бхах) ну если уж точно, то для строк Len тоже неправильно работает. Строки хранятся в юникоде по 2 байта на символ, а Len возвращается вдвое меньше)

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 05.04.10 18:57
Функция работает правильно, просто надо почитать, для чего она предназначена =) Для определения количества символов в строке. =)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам