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命令,每隔一次显示打开的文件

Python使用win32com创建Access数据库

如何在Python 中导入access 数据

Python语音识别(计算器)

python 操作ACCESS数据库中 如何删除记录