Диспетчеризация win32client завершается неудачно в python, в то время как win32::ole new успешно запускается в perl для com dll

У меня есть com dll, реализованный в C# и зарегистрирован через regasm. Когда я пытаюсь справиться с этой DLL в Python через

handle = win32com.client.Dispatch('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}')

или же

handle = win32com.client.Dispatch('MyCOMdll')

происходит сбой с ошибкой: (-2147221164, "Класс не зарегистрирован", Нет, Нет)

в то время как это работает в сценарии Perl, где я использую

my $handle = Win32::OLE->new('MyCOMdll');

или же

my $handle = Win32::OLE->new('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}');

Тем временем win32com.client.Dispatch работает хорошо для объектов COM exe.

Правильно ли я использую win32.comclient для COM-библиотек?


[обновление 01]

Perl-код, который работает

use Win32::OLE;
my $handle = Win32::OLE->new('MyCOMdll');
# my $handle = Win32::OLE->new('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}');
my $result = Win32::OLE->LastError();
if ($result != 0)
{
    print("OLE Error: ",$result,"/n");
    die "";
}
else
{
    print("OLE Success!!/n");
}
exit 0;

Python код, который работает только для COM EXE, а не для COM DLL

import win32com.client

try:
    handle = win32com.client.Dispatch('MyCOMdll')
    # handle = win32com.client.Dispatch('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}')
except Exception as ex:
    handle = None
    print(ex)

1 ответ

Это была проблема 32/ 64 бит. После использования 32-битной версии Python проблема была решена.

Другие вопросы по тегам