DirectDrawEnumerateExW calls DirectDrawEnumerateExA

Saulius Krasuckas saulius2 at ar.fi.lt
Tue Nov 8 06:53:34 CST 2005


* On Thu, 27 Oct 2005, Lionel Ulmer wrote:
> 
> > You mean, if some day M$ changes ddraw.h so that szDescription type 
> > becomes WCHAR, right?
> 
> Well, the API is like this:
> HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
> 
> With:
> typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR);

But this doesn't say anything about a type of a string, based on which 
dll/ddraw code works (or should work).

> The question now is wether it is guaranteed to have the string returned 
> by 'DirectDrawEnumerateExW' be the same than the one returned by 
> 'DDRAW->GetDeviceIdentifier()'.

Here I probably stopped following you.  GetDeviceIdentifier() fills a 
struct named DDDEVICEIDENTIFIER2:

| typedef struct tagDDDEVICEIDENTIFIER2 {
|   char    szDriver[MAX_DDDEVICEID_STRING];      /* user readable driver name */
|   char    szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */
|   LARGE_INTEGER  liDriverVersion;               /* driver version */

This way strings cannot be the same, as one is widechar (passed as LPWSTR 
to DDENUMCALLBACKEXW) while another is multibyte (defined as char in 
DDDEVICEIDENTIFIER2).  I guess DX SDK headers may not be wrong here.



More information about the wine-devel mailing list