Thread overview | |||||
---|---|---|---|---|---|
|
October 01, 2004 Some Problems!! | ||||
---|---|---|---|---|
| ||||
// Questions Hi there, Please I need advice on the following subjects: 1- Some macro #defines are deficult to implement in D. eg.: #define rvaDLLName szName Is there any other way than doing global search and replace? 2- How I can implement template functions in D. eg.: in C++: template <class T> void DumpOptionalHeader(T* pImageOptionalHeader); I converted it to: template DumpOptionalHeader(T = IMAGE_OPTIONAL_HEADER32) { void DumpOptionalHeader(T* pImageOptionalHeader) // 'T' is IMAGE_OPTIONAL_HEADER32/64 { ... } } Is this right? or is there any beter way? 3- The following code compile in C++ but not in D and compiler give outside array bounds error. why? in C++: typedef struct DATASYM32 { unsigned short reclen; // Record length unsigned short rectyp; // S_LDATA32, S_GDATA32 or S_PUB32 CV_uoff32_t off; unsigned short seg; CV_typ_t typind; // Type index unsigned char name[1]; // Length-prefixed name } DATASYM32; typedef DATASYM32 PUBSYM32; PCSTR pszUndecoratedName = (PCSTR)&pDataSym32->name[1]; // < == NOTE this I converted it to but the markered array line give outside array bounds error [0..1] struct DATASYM32 { ushort reclen; // Record length ushort rectyp; // S_LDATA32, S_GDATA32 or S_PUB32 CV_uoff32_t off; ushort seg; CV_typ_t typind; // Type index ubyte name[2]; // Length-prefixed name // originally, it was name[1] but the code below // gives outside of array bounds error although it compiles wright in C++. ??!!! } ; alias DATASYM32 PUBSYM32; PCSTR pszUndecoratedName = cast(PCSTR)&pDataSym32.name[1]; 4- about primitive types in C++ is: unsigned long => ulong or uint ? and other types, and it's equivelent in d ? 5- Is there any documentation or references about OMF lib format on the internet. maybe I can relate the data structures with the new Microsoft COFF archive format! |
October 01, 2004 Re: Some Problems!! | ||||
---|---|---|---|---|
| ||||
Posted in reply to aelmetwaly | In article <cjknl2$19d5$1@digitaldaemon.com>, aelmetwaly says... > >// Questions >Hi there, >Please I need advice on the following subjects: > >1- Some macro #defines are deficult to implement in D. eg.: > #define rvaDLLName szName > Is there any other way than doing global search and replace? > This should work: typedef szName rvaDDLName; |
October 01, 2004 Re: Some Problems!! | ||||
---|---|---|---|---|
| ||||
Posted in reply to aelmetwaly | aelmetwaly wrote: > // Questions > Hi there, > Please I need advice on the following subjects: in general see http://www.digitalmars.com/d/cpptod.html or ctod.html or pretod.html > 1- Some macro #defines are deficult to implement in D. eg.: > #define rvaDLLName szName > Is there any other way than doing global search and replace? alias szName rvaDLLName > 2- How I can implement template functions in D. eg.: > in C++: > template <class T> void DumpOptionalHeader(T* pImageOptionalHeader); > I converted it to: > template DumpOptionalHeader(T = IMAGE_OPTIONAL_HEADER32) { > void DumpOptionalHeader(T* pImageOptionalHeader) // 'T' is > IMAGE_OPTIONAL_HEADER32/64 > { ... } } > Is this right? or is there any beter way? looks ok to me > 3- The following code compile in C++ but not in D and compiler give > outside array bounds error. why? > in C++: > typedef struct DATASYM32 { > unsigned short reclen; // Record length > unsigned short rectyp; // S_LDATA32, S_GDATA32 or S_PUB32 > CV_uoff32_t off; > unsigned short seg; > CV_typ_t typind; // Type index > unsigned char name[1]; // Length-prefixed name > } DATASYM32; > typedef DATASYM32 PUBSYM32; > > PCSTR pszUndecoratedName = (PCSTR)&pDataSym32->name[1]; // < == NOTE this > > I converted it to but the markered array line give outside array bounds > error [0..1] > struct DATASYM32 { > ushort reclen; // Record length > ushort rectyp; // S_LDATA32, S_GDATA32 or S_PUB32 > CV_uoff32_t off; > ushort seg; > CV_typ_t typind; // Type index > ubyte name[2]; // Length-prefixed name // originally, it was > name[1] but the code below > // gives outside of array bounds error although it compiles > wright > in C++. ??!!! > } ; > alias DATASYM32 PUBSYM32; > > > PCSTR pszUndecoratedName = cast(PCSTR)&pDataSym32.name[1]; I don't know why it failed - one would think declaring name[2] would allow name[1] to be dereferenced. > 4- about primitive types in C++ is: > unsigned long => ulong or uint ? > and other types, and it's equivelent in d ? it depends. see the D doc. typically in C long is 32 bits. "long long" is 64. > 5- Is there any documentation or references about OMF lib format on the > internet. maybe I can relate the data > structures with the new Microsoft COFF archive format! try googling. I don't have any references handy. |
Copyright © 1999-2021 by the D Language Foundation