SetWindowsHookEx завершается с ошибкой 126
Я пытаюсь использоватьGma.UserActivityMonitor библиотека в проекте, и я столкнулся с ошибкой, которую я не могу преодолеть самостоятельно.
вHookManager.Callbacks.cs
файл есть статический метод с именемEnsureSubscribedToGlobalMouseEvents
со следующим кодом (более или менее):
var asm = Assembly.GetExecutingAssembly().GetModules()[0];
var mar = Marshal.GetHINSTANCE(asm);
s_MouseHookHandle = SetWindowsHookEx(
WH_MOUSE_LL,
s_MouseDelegate,
mar,
0);
//If SetWindowsHookEx fails.
if (s_MouseHookHandle == 0)
{
//Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
int errorCode = Marshal.GetLastWin32Error();
//do cleanup
//Initializes and throws a new instance of the Win32Exception class with the specified error.
throw new Win32Exception(errorCode);
}
SetWindowsHookEx
всегда возвращается0
и приведенный выше код продолжает выдавать исключение с сообщениемThe specified module could not be found
и призыв кMarshal.GetLastWin32Error
код возврата126
, Я могу успешно запустить демонстрацию, предоставляемую с оригинальным проектом Gma.UserActivityMonitor, но, поскольку мой проект слишком сложен для объяснения, я не могу вдаваться в подробности, объясняя его разницу с моим. Я просто надеюсь, что кто-то может слепо угадать проблему.
Кстати, в FAQ проекта сказано, что у других есть проблема, близкая к моей (сSetWindowsHookEx
возвращая ошибку), когдаEnable Visual Studio hosting process
проверяется только при отладке проекта. Поэтому я снял этот флажок у себя, и у меня все та же проблема, и не только в режиме отладки, но и когда я дважды щелкаю файл релиза в проводнике Windows (Visual Studio не участвует).
Чтобы дать больше информации, в демонстрационном проекте (который прекрасно работает)asm
переменная указывает на{Gma.UserActivityMonitor.dll}
и то же самое в моем проекте, который брошено исключение!