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:
The pKbdLayerDescriptor() fills an struct of: *KBD_LONG_POINTER PKBDTABLES;Code:kbdLibrary = LoadLibrary(L"C:\\windows\\system32\\KBDUS.DLL"); pKbdLayerDescriptor = (KbdLayerDescriptor)GetProcAddress(kbdLibrary, "KbdLayerDescriptor"); PKBDTABLES pKbd = pKbdLayerDescriptor();
The definition of KBD_LONG_POINTER PKBDTABLES (from Microsofts kbd.h):
Now here is the mainissue, program is compiled with x86 but executed on a x64-system.Code:#if defined(BUILD_WOW6432) #define KBD_LONG_POINTER __ptr64 #else #define KBD_LONG_POINTER #endif
* 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?


Reply With Quote
Bookmarks