Hi !
Again I need some help ... hoping there's anybody here familar with the memory-organization of C/C++ !
While I'm converting the DX8.1-includes I need to convert structures. Although I've did all the Type-Declarations I still try to fill the structures with basic types like DWord, Word, etc.
(I know that this will not be 64-Bit compatible ...)
The problem I have occurs now while making the includes for DirectShow ( and I think there may be many errors in the DMusic-files !)
Many constants are defined by enumerating and the defining type need not to be a 32-bit value. It's possible that it is only a 16 bit or 8-bit type. This may be compiler relevant (Whats the default in Visual C ?)
Boolean have also the size 1 (means 8-Bit value), but the WINDOWS-defined BOOL is a DWord !
But what's the ordering of them in structures ? Will they all be aligned at DWord-Boundary ? Or will couples of four bytes put together in one DWord ?
I havn't got VC - so who can help me ?
The following structure is one of those problematic structures. If no field-alignment will be done the acces of the DWord-values isn't good at all:
The original types are given by comments ...
The maximum number of the DVD_xxx-constants are
so they seem to be 8-Bit values, or ?
Greetings, CALEB
Again I need some help ... hoping there's anybody here familar with the memory-organization of C/C++ !
While I'm converting the DX8.1-includes I need to convert structures. Although I've did all the Type-Declarations I still try to fill the structures with basic types like DWord, Word, etc.
(I know that this will not be 64-Bit compatible ...)
The problem I have occurs now while making the includes for DirectShow ( and I think there may be many errors in the DMusic-files !)
Many constants are defined by enumerating and the defining type need not to be a 32-bit value. It's possible that it is only a 16 bit or 8-bit type. This may be compiler relevant (Whats the default in Visual C ?)
Boolean have also the size 1 (means 8-Bit value), but the WINDOWS-defined BOOL is a DWord !
But what's the ordering of them in structures ? Will they all be aligned at DWord-Boundary ? Or will couples of four bytes put together in one DWord ?
I havn't got VC - so who can help me ?
The following structure is one of those problematic structures. If no field-alignment will be done the acces of the DWord-values isn't good at all:
_DVD_AudioAttributes STRUCT
AppMode DWORD ? ; DVD_AUDIO_APPMODE
AppModeData BYTE ?
AudioFormat DWORD ? ; DVD_AUDIO_FORMAT
Language DWORD ? ; LCID
LanguageExtension DWORD ? ; DVD_AUDIO_LANG_EXT
fHasMultichannelInfo DWORD ? ; BOOL
dwFrequency DWORD ?
bQuantization BYTE ?
bNumberOfChannels BYTE ?
dwReserved DWORD 2 DUP (?)
_DVD_AudioAttributes ENDS
The original types are given by comments ...
The maximum number of the DVD_xxx-constants are
DVD_AUD_EXT_DirectorComments2 EQU 4
DVD_AudioFormat_Other EQU 8
DVD_AudioMode_Other EQU 3
so they seem to be 8-Bit values, or ?
Greetings, CALEB
enum = int = 4bytes // the C standard says enum is int sized
bool = char = 1byte // bool... dunno what the C++ standard says, VC is char.
BOOL = int = 4bytes // windows standard
All structure members are aligned. Can't remember granularity,
but will most likely be either 4, 8 or 16.
btw, shouldn't your signature be "... and the answer is ... "42"",
without the last e in answer? :).
bool = char = 1byte // bool... dunno what the C++ standard says, VC is char.
BOOL = int = 4bytes // windows standard
All structure members are aligned. Can't remember granularity,
but will most likely be either 4, 8 or 16.
btw, shouldn't your signature be "... and the answer is ... "42"",
without the last e in answer? :).
Thanks f0dder !
This dummy mistake with the e - I'was doing so since I have begn to learn english ;)
OK if I get you right, a structure like
will reserve 16 bytes if fields are aligned to 4-byte-boundaries, or ?
This dummy mistake with the e - I'was doing so since I have begn to learn english ;)
OK if I get you right, a structure like
MyStructure STRUCT
Val1 BYTE ?
Val2 BYTE ?
Val3 BYTE ?
Val4 BYTE ?
MyStructure ENDS
will reserve 16 bytes if fields are aligned to 4-byte-boundaries, or ?
This will insure DWORDs are always on a four byte boundary:
MyStructure STRUCT [b]4[/b]
Val1 BYTE ?
Val2 BYTE ?
Val3 BYTE ?
Val4 BYTE ?
MyStructure ENDS
But it would have no effect on the above structure because all the sizes are byte.MyStructure STRUCT [b]4[/b]
Val1 BYTE ?
Val2 BYTE ?
Val3 BYTE ?
Val4 DWORD ?
MyStructure ENDS
This structure however is 8 bytes long - MASM aligns the DWORD on four bytes.Thanks bitRake !
This is the answer I need !
Now DShow can come ...
Greetings, CALEB
This is the answer I need !
Now DShow can come ...
Greetings, CALEB
Bitrake, that is *great* - I always thought I had to do manual
struct padding :D
You got me in a bit of doubt now, by the way. I can't remember if
C compilers usually align all fields, or only the fields that "need"
alignment...
struct padding :D
You got me in a bit of doubt now, by the way. I can't remember if
C compilers usually align all fields, or only the fields that "need"
alignment...
bitRAKE
Thanks for posting it, I learned something new today :)
Thanks for posting it, I learned something new today :)