我有一个用C#实现的com,并通过regasm注册。当我试图通过python获取这个DLL的句柄
handle = win32com.client.Dispatch('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}')
要么
handle = win32com.client.Dispatch('MyCOMdll')
它失败并出错:(-2147221164,'Class not registered',None,None)
虽然这适用于我使用的perl脚本
my $handle = Win32::OLE->new('MyCOMdll');
要么
my $handle = Win32::OLE->new('{EC456B4B-5AC4-46E8-99E8-54C193C316BC}');
同时win32com.client.Dispatch适用于COM exe对象。
我正在使用win32.comclient for COM dlls的方式是否正确?
[更新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)
这是一个32位/ 64位的问题。使用32位python版本后,问题得到解决。