imm32: Make space for a 64bit pointer in the IMM window.

Michael Stefaniuc mstefani at redhat.com
Wed Feb 11 07:14:17 CST 2009


Aric Stewart wrote:
> I am not a 64 bit expert but i do not think this is going to work.
> 
> ddk/imm.h is a Microsoft header so IMEs and programs compiled with the
> original header will not have the expanded space.
They will as the Microsoft header has the exact same change as I did in
this patch. It's not directly in imm.h but in immdev.h; our imm.h header
would need to be split for "full compatibility" with the Microsoft DDK
headers but that's something for an other patch.

bye
	michael

> To fix this properly (I assume you are trying to support 64 bit) is that
> we will probibly have to store a handle instead of a pointer in the LONG
> value.  The IME is expecting a HIMC in that value.
> 
> Which leads to a more general question.  What is the suggested way to
> generate handles like that? Working toward 64 bit means that everywhere
> that we are using pointers as  LONG handles is going to have problems.
> 
> -aric
> 
> Michael Stefaniuc wrote:
>> ---
>> Next try at fixing this problem. I didn't find any other place where
>> IMMGWL_IMC is used and the window classes are not my area of expertise.
>>
>>
>>
>>  dlls/imm32/imm.c       |    2 +-
>>  dlls/winex11.drv/ime.c |    2 +-
>>  include/ddk/imm.h      |    2 +-
>>  3 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
>> index 14178c3..bb50e5e 100644
>> --- a/dlls/imm32/imm.c
>> +++ b/dlls/imm32/imm.c
>> @@ -2291,7 +2291,7 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen)
>>          data->imeWnd = CreateWindowExW( WS_EX_TOOLWINDOW,
>>                      data->immKbd->imeClassName, NULL, WS_POPUP, 0, 0,
>> 1, 1, 0,
>>                      0, data->immKbd->hIME, 0);
>> -        SetWindowLongW(data->imeWnd, IMMGWL_IMC, (LONG)data);
>> +        SetWindowLongPtrW(data->imeWnd, IMMGWL_IMC, (LONG_PTR)data);
>>          IMM_GetThreadData()->hwndDefault = data->imeWnd;
>>      }
>>  
>> diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c
>> index 87d4faa..6d083d1 100644
>> --- a/dlls/winex11.drv/ime.c
>> +++ b/dlls/winex11.drv/ime.c
>> @@ -1326,7 +1326,7 @@ static LRESULT WINAPI IME_WindowProc(HWND hwnd,
>> UINT msg, WPARAM wParam,
>>       * messages.
>>       */
>>  
>> -    hIMC = (HIMC)GetWindowLongW(hwnd,IMMGWL_IMC);
>> +    hIMC = (HIMC)GetWindowLongPtrW(hwnd,IMMGWL_IMC);
>>      if (!hIMC)
>>          hIMC = RealIMC(FROM_X11);
>>  
>> diff --git a/include/ddk/imm.h b/include/ddk/imm.h
>> index 6e4d42f..bc9617e 100644
>> --- a/include/ddk/imm.h
>> +++ b/include/ddk/imm.h
>> @@ -114,7 +114,7 @@ HIMCC  WINAPI ImmReSizeIMCC(HIMCC, DWORD);
>>  DWORD  WINAPI ImmGetIMCCSize(HIMCC);
>>  
>>  #define IMMGWL_IMC                      0
>> -#define IMMGWL_PRIVATE                  (sizeof(LONG))
>> +#define IMMGWL_PRIVATE                  (sizeof(LONG_PTR))
>>  
>>  /* IME Property bits */
>>  #define IME_PROP_END_UNLOAD             0x0001
>>
>>
>> ------------------------------------------------------------------------
>>
>>



More information about the wine-devel mailing list