win32client dispatch在python中失败,而win32 :: ole new在perl中成功运行for com dll
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win32client dispatch在python中失败,而win32 :: ole new在perl中成功运行for com dll相关的知识,希望对你有一定的参考价值。
我有一个用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版本后,问题得到解决。
以上是关于win32client dispatch在python中失败,而win32 :: ole new在perl中成功运行for com dll的主要内容,如果未能解决你的问题,请参考以下文章
使用 win32com.client 模块在 Python 中将 .XLSX 转换为 .XLS
Word = win32.Dispatch(“ Word.Application”)不管Word.Visible = False命令,每隔一次显示打开的文件