[5/5] user32: Move character conversion logic to dde_server.d & remove todo's

Jeff Latimer lats at yless4u.com.au
Fri Sep 5 08:04:14 CDT 2008


Alexandre Julliard wrote:
> Jeff Latimer <lats at yless4u.com.au> writes:
>
>   
>> @@ -772,12 +774,51 @@ static	WDML_QUEUE_STATE WDML_ServerHandleExecute(WDML_CONV* pConv, WDML_XACT* pX
>>  
>>  	if (ptr)
>>  	{
>> -	    hDdeData = DdeCreateDataHandle(0, ptr, GlobalSize(pXAct->hMem),
>> +            DWORD memSize, ptrSize = GlobalSize(pXAct->hMem);
>> +
>> +            TRACE("Client is %s, Server is %s, Text is %s\n",
>> +                  IsWindowUnicode(pConv->hwndClient) ? "Unicode" : "ANSI",
>> +                  IsWindowUnicode(pConv->hwndServer) ? "Unicode" : "ANSI",
>> +                  IsTextUnicode(ptr, ptrSize, NULL) ? "Unicode" : "ANSI");
>> +
>> +            if (!(IsWindowUnicode(pConv->hwndClient)) && !(IsWindowUnicode(pConv->hwndServer)) && IsTextUnicode(ptr, ptrSize, NULL))
>> +                memSize = WideCharToMultiByte( CP_ACP, 0, ptr, ptrSize / sizeof(WCHAR), NULL, 0, NULL, NULL);
>> +
>> +            else if (IsWindowUnicode(pConv->hwndServer) && !IsTextUnicode(ptr, ptrSize, NULL))
>> +                memSize = MultiByteToWideChar( CP_ACP, 0, ptr, ptrSize, NULL, 0) * sizeof(WCHAR);
>>     
> Using IsTextUnicode doesn't look right, you shouldn't need to guess.
>
>   
I am not sure how to get around guessing in this case.  The client call 
DdeClientTransaction and passes the data as LPBYTE.  The server receives 
the data as a block of bytes and has to work out whether the data is 
Unicode.  The client does not really know if the data is Unicode and DDE 
does not pass a data type with XTYP_EXECUTE.  I could stick a FIXME note 
in there for the meantime.

Jeff



More information about the wine-devel mailing list