Hi

I currently have an issue with the init of lateloading DLLs (keyboard files) that is compiled either with x86 or x64. The app is a simple C++ MFC application (32-bit)

First, here is a summary of the lateloading of the keyboard files:
Code:
kbdLibrary = LoadLibrary(L"C:\\windows\\system32\\KBDUS.DLL");
pKbdLayerDescriptor = (KbdLayerDescriptor)GetProcAddress(kbdLibrary, "KbdLayerDescriptor");
PKBDTABLES pKbd = pKbdLayerDescriptor();
The pKbdLayerDescriptor() fills an struct of: *KBD_LONG_POINTER PKBDTABLES;

The definition of KBD_LONG_POINTER PKBDTABLES (from Microsofts kbd.h):
Code:
#if defined(BUILD_WOW6432)
    #define KBD_LONG_POINTER __ptr64
 #else
     #define KBD_LONG_POINTER
 #endif
Now here is the mainissue, program is compiled with x86 but executed on a x64-system.
* All keyboard files in %windir%\system32\ is x64 DLLs files and failes (because BUILD_WOW6432 doesn't exist)
* Struct is partly filled, possible corrupt

Same app running on a x86-system:
* All keyboard files are loaded ok, because the keyboardfiles in %windir%\system32\ is x86.

Taking a x86 KBDxx.DLL to a x64-system:
* Loaded ok, without a problem

Forcing the KBD_LONG_POINTER as __ptr64 on a x32-system:
* All keyboard files fails to load (as expected)

Forcing the KBD_LONG_POINTER as __ptr64 on a x64-system:
* All keyboard files are loaded ok (as expected).

Any tips on how to get this to work, without creating a kbd64.h containing the "same" defines?
Is it possible to "redefine" during runtime?