ctypes DLL с необязательными зависимостями - PullRequest
0 голосов
/ 26 мая 2010

Отказ от ответственности: я новичок в программировании Windows, поэтому некоторые из моих предположений могут быть неверными. Пожалуйста, поправьте меня, если так.

Я разрабатываю оболочку Python для C API, используя ctypes. API поставляется с 64 и 32 DLL / LIB. Я могу успешно загрузить DLL, используя ctypes.WinDLL ('TheLibName'), вызывать функции и т. Д. И т. Д.

Однако некоторые функции делали не так, как должны. При дальнейшем исследовании выясняется, что используется 32-битная DLL, что и вызывает непредвиденное поведение.

Я пытался использовать ctypes.WinDLL ('TheLibName64'), но модуль не найден. Я попытался зарегистрировать DLL с помощью regsrv32, но он сообщает, что нет точки входа (он также сообщает об отсутствии точки входа, когда я пытаюсь зарегистрировать TheLibName, который равен , найденный WinDLL ().

DLL поставляется с примером проекта в Visual Studio (у меня 0 опыта работы с VS, поэтому еще раз, пожалуйста, исправьте меня здесь), который создает 32- и 64-битные версии примера проекта. В файле .vcsproj конфигурации для 64-битной версии включают в себя:

AdditionalDependencies="TheLibName64.lib"

в разделе VCLinkerTool.

В windows / system32 есть как TheLibName.dll / .lib, так и TheLibName64.dll / .lib.

Так что мне кажется, что теперь моя проблема состоит в том, чтобы загрузчик DLL Python ctypes загружал эти необязательные зависимости при загрузке DLL. Однако я не могу найти какую-либо информацию об этом (возможно, потому что, как дремлющий нуб, я не знаю правильной терминологии) в документации по ctypes.

Есть ли способ сделать это в ctypes? Я поступаю об этом совершенно неправильно? Будем весьма благодарны за любую помощь или общую информацию о необязательных зависимостях DLL и о том, как они загружаются в Windows.

Спасибо

1 Ответ

0 голосов
/ 26 мая 2010

Я могу загрузить LibName64, когда использую 64-битную версию Python. Должен был попробовать это раньше!

...