не может запустить 32-битную DLL в Python 32-битной на 64-битной платформе - PullRequest
1 голос
/ 01 мая 2019

краткое резюме: У меня есть DLL, которая обнаруживает хуки в компьютере (это версия, которую я нашел в Интернете), и она работает на 32-битной, так что я решил, что я должен также использовать 32-битнуюверсия Python.Теперь моя ОС 64-битная, но я прочитал другие проблемы, и они сказали, что это не должно быть проблемой, пока процесс, который ее запускает (Python), находится в 32-битной версии.поэтому я запустил программу и сказал:

'' 'Эта программа в настоящее время не поддерживает 64-битные хосты.Не удалось подключить к рабочему столу 'Default'. '' '

' '' FATAL: c: \ users \ 1 \ downloads \ hookd1 \ hookdll \ desktop.c line 781, init_global_desktop_store (): ошибка add_all_desktops (),Не удалось добавить какие-либо рабочие столы. '' '

Это означает, что 64-битная машина не может запустить его, но, как вы можете видеть из кода ниже, это всего лишь предупреждение и должно работать (я думаю):

void warn_x64( void )
{
    USHORT x64_host = 0;


    /* IsWow64Process() is not always available. alternative:
    Windows x86 host GS register is 0, x64 GS register is not
    */
#if defined( _MSC_VER )
    __asm
    {
        mov x64_host, gs
    }
#else
    asm( "mov %%gs, %0" : "=r" (x64_host) );
#endif

    if( x64_host )
        MSG_WARNING( "This program does not currently support 64-bit hosts." );

    return;
}

мои попытки решить проблему:

  • изменение Python на 32-битную версию

  • запуск DLL в sysWOw64 с использованием regsvr32 (не совсем понял решение, но DLL, кажется, не работает, если я что-то упустил).

  • изменил мой проект Visual Studio с отладочной версии на выпуск, потому что проверка зависимостей показала, что он использует msvcr100d.dll, которого у меня не было, поэтому я изменил DLL на выпускную версию.

  • Другое решение, которое япопробовал и не сработало: исправление, которое я видел где-то, было изменено с Any CPU на x86 в решении, но у моего решения есть только 2 других варианта, которые являются «активными (win32)» и win32.Мой в настоящее время находится на active(win32), и я думаю, что это тот, который должен поддерживать, и для тех, кто говорит, что я должен попробовать win32, я перестроил решение с помощью win32, и это дало ту же проблему.

краткое окончательное объяснение того, что я хочу: Я прочитал похожие вопросы к моему и попробовал их решения, но ни один из них не решил мою проблему, все, что я хочу, это запустить мой 32-разрядныйDLL в Python 32-битная, хотя моя ОС 64-битная (программа на C сказала, что она не принимает 64 хоста, но должна, в соответствии с другими решениями, указанными в stackoverflow, это также просто предупреждение).вывод: я исключил его запуск в этой 64-битной среде (потому что библиотека DLL, Python, работает в 32-битной среде).но вместо этого он не запустился, потому что программа, кажется, предупреждает о 64 хостах.

EDIT : Я должен также упомянуть исходный код .Хотя я внес изменения в вывод, который дает DLL, отличается, но я ничего не изменил, кроме вывода.

Спасибо всем, кто пытается помочь мне решить эту очень неприятную проблему!

...