Диспетчеризация 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 проблема была решена.