Использование ключевого слова установки Py2exe ctypes_com_server с Python 3

63
4

Я делаю расширение для программы Windows, которая перехватывает объекты COM-сервера. Я хочу использовать Python для этого, и, насколько я понимаю, я могу использовать Py2exe для создания DLL с сервера comtypes.

Для теста я написал простой класс, который вызывает метод печати, открытый через RPC. Я создал COM-интерфейс для этого класса, зарегистрировал его, создал экземпляр COM-объекта из другой программы Python и назвал метод печати. Оно работает.

(Я создал репозиторий для справки здесь: https://github.com/jakogut/python-inproc_server)

Однако, когда я использую Py2exe для создания DLL с моего COM-сервера и пытаюсь зарегистрировать эту DLL, используя regsvr32, всплывающее сообщение сообщает:

Модуль "RemotePrint.dll" был загружен, но вызов DllRegisterServer завершился с кодом ошибки 0x80040201

До сих пор я пытался запустить из командной строки администратора, очистив кеш файлы comtypes и заново создав DLL, профилируя зависимости библиотеки времени выполнения, используя Dependency Walker (он застыл/разбился и не дал никакой полезной информации), и работает на другой машине,

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

спросил(а) 2021-01-25T15:01:11+03:00 4 месяца, 3 недели назад
1
Решение
63

Похоже, что проблема заключалась в сбой Python Interpreter, потому что он не мог импортировать RemotePrintLib из comtypes.gen. Добавление 'comtypes.gen' к опции включения для distutils!

Одна вещь, которая помогла диагностировать это, была win32traceutil.

ответил(а) 2021-01-25T15:01:11+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема