win32client dispatch在python中失败,而win32 :: ole new在perl中成功运行for com dll

问题描述 投票:0回答:1

我有一个用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)
python perl com win32com win32ole
1个回答
0
投票

这是一个32位/ 64位的问题。使用32位python版本后,问题得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.