No, I don't need tchar.h in 'unixcalls.c'.
I only needed it
for 'winefile.c'. The problem is, if I add 'include/msvcrt'
to the include path, it is added to both files at the same time.
I see. What about adding a separate rule to Makefile.in just for
unixcalls.c and omit that file from C_SRC? That way you can control
again which parameters will be passed to gcc. As unixcalls.c is not a
"traditional" windows source file, but a bridge to the Unix system, I
think that approach should be OK.
But the biggest problem I forgot about before is
wsprintf(). Wine's
wsprintf() implementation only handles 64 bit integer formats ("%Ld",
"%Lx") when using msvcrt. So I will have to use LoadLibrary() and
GetProcAddress() to call vswprintf() for this string formats.
According to MSDN, wsprintf() does not handle INT64 et all. So Wine is
correct when it does not either.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/w
inui/windowsuserinterface/resources/strings/stringreference/stringfuncti
ons/wsprintf.asp
So dynamically linking to msvcrt seems to be the only possible solution.
I thought it is not allowed to use the
"-fshort-wchar" option
in Wine because not all compilers support it? If it is -
using which macro should one add it to Makefile.in? Anyways -
I don't need it, because there are no more literal wide
string character constants.
You are right, it is NOT allowed in Wine code since it's not portable
between compilers. There WCHAR[] is the right choice. However it is for
Winelib applications (at least the docs suggest it). As Winefile is on
one hand a Winelib application but on the other part of the official
Wine distribution, I recommend to use WCHAR[] when you need Unicode
string literals - that's the safe side. ;-)
CharUpperW() ...
What a hack! ;-)
There are many Windows API functions that use a similar pattern. For
example the resource loading functions like LoadIcon() do the same, i.e.
they interpret the given resource name as WORD if HIWORD(pszResource) is
0 or as string otherwise. That's what MAKEINTRESOURCE() is all about. I
call it the C way of "function overloading". ;-)
Regards
Ralf