globalalloc
От: Kreont Эстония  
Дата: 03.04.02 17:11
Оценка:
HGLOBAL mem;
int* pmem;
DWORD dwOffset = 1050;

mem = GlobalAlloc(GHND,dwFileLen);
pmem = (int*) GlobalLock(mem);

Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??
The life will soon come to end...
Re: globalalloc
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.04.02 17:14
Оценка:
Здравствуйте Kreont, Вы писали:

K>HGLOBAL mem;
K>int* pmem;
K>DWORD dwOffset = 1050;

K>mem = GlobalAlloc(GHND,dwFileLen);
K>pmem = (int*) GlobalLock(mem);


K>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??

char* pOffset = (char*)pmem + dwOffset;


C edf;tybtv, что значит
С уважением
Алексей Кирдин
Re[2]: globalalloc
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.04.02 17:16
Оценка:
Здравствуйте Kaa, Вы писали:

K>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??

void* pOffset = (void*)(char*)pmem + dwOffset;


Ну, я думаю, ты и так догадался, да? )

С уважением
Алексей Кирдин
Re[3]: globalalloc
От: Alex Fedotov США  
Дата: 03.04.02 17:26
Оценка:
Здравствуйте Kaa, Вы писали:

K>>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??

Kaa>
Kaa>void* pOffset = (void*)(char*)pmem + dwOffset;
Kaa>


Ну, это компилироваться не должно, если я еще язык не забыл.

void* pOffset = (void*)((char*)pmem + dwOffset);
-- Alex Fedotov
Re[3]: globalalloc
От: Kreont Эстония  
Дата: 03.04.02 17:27
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Kaa, Вы писали:


K>>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??

Kaa>
Kaa>void* pOffset = (void*)(char*)pmem + dwOffset;
Kaa>


Kaa>Ну, я думаю, ты и так догадался, да? )


Неа
чем эт будет отличаться от
void* pOffset = (void*)pmem + dwOffset;
?

Kaa>С уважением
The life will soon come to end...
Re[4]: globalalloc
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.04.02 17:27
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Ну, это компилироваться не должно, если я еще язык не забыл.

AF>
AF>void* pOffset = (void*)((char*)pmem + dwOffset);
AF>


Крест на пузе. Спешил, видимо. Не забыл
Алексей Кирдин
Re[4]: globalalloc
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.04.02 17:36
Оценка:
Здравствуйте Kreont, Вы писали:

Я облажался, скобки забыл, и мне уже об этом указали.
K>>>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??
Kaa>>
Kaa>>void* pOffset = (void*)((char*)pmem + dwOffset);
Kaa>>


K>чем эт будет отличаться от

K>void* pOffset = (void*)pmem + dwOffset;
K>?
Тем, что прибавить что-то можно только к указателю, у которого размер данных изветстен. Когда ты прибавляешь целое к указателю, он сдвигается в памяти на размер того объекта, на который указыват. Указатель на void попросить сдвинуться нельзя, т.к. нет размера его указываемого объекта, и сдвиг не может быть осуществлен.

В случае, когда pmem приведен к char*, указываемый объект предполагается имеющим размер sizeof(char), и тогда сдвиг на dwOffset передвинет указатель на dwOffset*sizeof(char) байт. А потом уже полученный указатель преобразовывается в родовой (указатель на void).

С уважением
Алексей Кирдин
Re[5]: globalalloc
От: Kreont Эстония  
Дата: 03.04.02 17:57
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Kreont, Вы писали:


Kaa>Я облажался, скобки забыл, и мне уже об этом указали.

K>>>>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??
Kaa>>>
Kaa>>>void* pOffset = (void*)((char*)pmem + dwOffset);
Kaa>>>


K>>чем эт будет отличаться от

K>>void* pOffset = (void*)pmem + dwOffset;
K>>?
Kaa>Тем, что прибавить что-то можно только к указателю, у которого размер данных изветстен. Когда ты прибавляешь целое к указателю, он сдвигается в памяти на размер того объекта, на который указыват. Указатель на void попросить сдвинуться нельзя, т.к. нет размера его указываемого объекта, и сдвиг не может быть осуществлен.

Kaa>В случае, когда pmem приведен к char*, указываемый объект предполагается имеющим размер sizeof(char), и тогда сдвиг на dwOffset передвинет указатель на dwOffset*sizeof(char) байт. А потом уже полученный указатель преобразовывается в родовой (указатель на void).


Kaa>С уважением


Получается что void* уже ни во что низзя преобразовать.
а эта радость
void* pOffset = [b](void*)((char*)pmem + dwOffset)

эквивалентна этой
 void* pOffset = [b](void*)((byte*)pmem + dwOffset)


tak vedj ?
The life will soon come to end...
Re[4]: globalalloc
От: Андрей Тарасевич Беларусь  
Дата: 03.04.02 20:26
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте Kaa, Вы писали:


K>>>>Как получить указатель типа void* на байт смещённый от pmem на dwOffset ??

Kaa>>
Kaa>>void* pOffset = (void*)(char*)pmem + dwOffset;
Kaa>>


AF>Ну, это компилироваться не должно, если я еще язык не забыл.


AF>
AF>void* pOffset = (void*)((char*)pmem + dwOffset);
AF>


Необходимости в (void*) все равно нет. Что в С, что в С++, приведение указателя на объект к типу 'void*' — стандартная конверсия (если cv-квалификация соответствует)
Best regards,
Андрей Тарасевич
Re[6]: globalalloc
От: Андрей Тарасевич Беларусь  
Дата: 03.04.02 20:28
Оценка:
Здравствуйте Kreont, Вы писали:

K>а эта радость

K>
K>void* pOffset = [b](void*)((char*)pmem + dwOffset) 
K>

K>эквивалентна этой
K>
K> void* pOffset = [b](void*)((byte*)pmem + dwOffset)
K>


K> tak vedj ?


В С/С++ нет типа 'byte'. Поэтому нельзя сказать, эквивалентно это или нет.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.