"Tony Lambregts" <tony_lambregts(a)telusplanet.net> wrote:
This one was required more that a mop and pail. In the end what I had to do is convert MF_CreateMetaHeaderDisk to unicode.
One burning question I have at this point is the relative merits of using RtlCreateUnicodeStringFromAsciiz vs MultiByteToWideChar
MultiByteToWideChar uses Rtl* functions internally and using ntdll APIs directly should give a slightly better performance. RtlCreateUnicodeStringFromAsciiz also is supposed to hide the internals of the conversion and help to avoid bugs and typos.
@@ -62,7 +65,7 @@ { DWORD dw1, dw2, dw3; WORD w4; - CHAR filename[0x100]; + WCHAR filename[MAX_PATHNAME_LEN];
Please do not increase the buffer size if there is no real need for it. MAX_PATHNAME_LEN = 1024. It's better though to replace 0x100 by MAX_PATH IMO.
} METAHEADERDISK; #include "poppack.h"
@@ -350,9 +353,9 @@ ERR("Not a disk based metafile\n"); return NULL; } - mhd = (METAHEADERDISK *)((char *)mh + sizeof(METAHEADER)); + mhd = (METAHEADERDISK *)((WCHAR *)mh + sizeof(METAHEADER));
Wrong.
@@ -377,8 +380,8 @@ sizeof(METAHEADER) + sizeof(METAHEADERDISK)); mh->mtType = METAFILE_DISK; size = HeapSize( GetProcessHeap(), 0, mh ); - mhd = (METAHEADERDISK *)((char *)mh + sizeof(METAHEADER)); - strcpy(mhd->filename, filename); + mhd = (METAHEADERDISK *)((WCHAR *)mh + sizeof(METAHEADER));
Wrong again. -- Dmitry.