Piotr Caban (@piotr) commented about dlls/imm32/imm.c:
switch (fdwReason) { case DLL_PROCESS_ATTACH:
module_ole32 = LoadLibraryA("ole32");
pCoRevokeInitializeSpy = (void*)GetProcAddress(module_ole32, "CoRevokeInitializeSpy");
pCoUninitialize = (void*)GetProcAddress(module_ole32, "CoUninitialize");
The initialization should be done in imm_coinit_thread function. You may also consider using GetModuleHandle instead of LoadLibraryA so you don't have to explicitly free the module.