微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用comtypes访问32位VB6 DLL

如何解决如何使用comtypes访问32位VB6 DLL

我试图访问用 VB6 编写的旧 32 位 DLL 中的两个函数(之前在 Excel 32 位环境中访问过它)。使用带有 comtypes 的 python 32bit 我设法看到了这两个函数及其输入(顺便说一句,我努力用 DLL Export Viewer 和 dumpbin.exe 找到这些)。

Comtypes 返回以下详细信息:

# -*- coding: mbcs -*-
typelib_path = 'c:\\AF\\CalcARB_Library.dll'
_lcid = 0 # change this if required
from ctypes import *
from comtypes import GUID
from comtypes import CoClass
import comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0
from ctypes.wintypes import VARIANT_BOOL
from comtypes.automation import _midlSAFEARRAY
from ctypes import HRESULT
from comtypes import helpstring
from comtypes import COMMETHOD
from comtypes import dispid


class clsCalcARB_Library(CoClass):
    _reg_clsid_ = GUID('{2A5721F0-571A-4239-AEEB-B8EED7859C0E}')
    _idlflags_ = []
    _typelib_path_ = typelib_path
    _reg_typelib_ = ('{D1DA3979-1AFE-493E-A6FD-AB5466C226A6}',1,0)
class _clsCalcARB_Library(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.Idispatch):
    _case_insensitive_ = True
    _iid_ = GUID('{98414811-7EE4-44A3-8AFF-7B9B6789D7A4}')
    _idlflags_ = ['hidden','dual','nonextensible','oleautomation']
clsCalcARB_Library._com_interfaces_ = [_clsCalcARB_Library]

_clsCalcARB_Library._methods_ = [
    COMMETHOD([dispid(1745027073),'propget'],HRESULT,'CalcARB_Value',( ['in','out'],POINTER(c_double),'PdblCP' ),POINTER(VARIANT_BOOL),'PboAF' ),POINTER(_midlSAFEARRAY(c_double)),'PdblScale' ),( ['out','retval'],'None' )),COMMETHOD([dispid(1745027072),'CalcARB_TM',]

################################################################
## code template for _clsCalcARB_Library implementation
class _clsCalcARB_Library_Impl(object):
    @property
    def CalcARB_Value(self):
        '-no docstring-'
        #return PdblCP,PboAF,PdblScale,<unnamed>

    @property
    def CalcARB_MT(self):
        '-no docstring-'
        #return PdblCP,<unnamed>
    
class Library(object):
    name = 'CalcARB_Library'
    _reg_typelib_ = ('{D1DA3979-1AFE-493E-A6FD-AB5466C226A6}',0)

__all__ = [ 'clsCalcARB_Library','_clsCalcARB_Library']
from comtypes import _check_version; _check_version('1.1.10',1102672632.000000)

我感兴趣的是将参数 PdblCP、PboAF 和 PdblScale 传递给该函数,并返回 CalcARB_Value 和 CalcARB_TM。

我尝试了各种方法,但我一生都无法访问这些功能。就我对代码的有限理解而言,_clsCalcARB_Library_Impl 中的 CalcARB_Value 与 _clsCalcARB_Library 中的 methods 中定义的函数无关。

我使用的另一种方法是:

import comtypes.client as cc
tlb_id = comtypes.GUID("{D1DA3979-1AFE-493E-A6FD-AB5466C226A6}")
val_model = cc.GetModule((tlb_id,0)) 
val_model._clsCalcARB_Library.__clsARB_Library__com__get_ARB_Value(what_goes_here_?)

这似乎至少是在访问 ARB_Value 函数......但我不确定变量的格式。

有人能够帮助我或至少指出我正确的方向吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。