热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python写dll接口_如何从python中的dll加载具有自定义接口的COM对象?

大家好。任务是使用从dll加载的COM对象(禁止使用regsvr32)。该对象还公开了我将来需要的DirectShow接口。在然后我试图使用thislink中的示例获取一个模块&#

大家好。

任务是使用从dll加载的COM对象(禁止使用regsvr32)。该对象还公开了我将来需要的DirectShow接口。在

然后我试图使用this link中的示例获取一个模块,但遇到了一个问题:pythoncom对DirectShow接口(例如IBaseFilter)一无所知。而且from this post我觉得pythoncom不支持定制的COM接口,但那是在2008年,也许事情已经改变了?在

代码是# -*- coding: utf-8 -*-

import ctypes, inspect, os, pythoncom, sys

from comtypes import client

from ctypes import OleDLL, c_long, byref

from uuid import UUID

#dshow is a module with DirectShow constants, etc

cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"path_to_dshow_module")))

if cmd_subfolder not in sys.path:

sys.path.insert(0, cmd_subfolder)

import dshow

#that way comtypes gets to know about DirectShow interfaces

qedit = client.GetModule("qedit.dll")

dll_path = os.path.join(cmd_subfolder, "../my_path/my_dshow_filter.ax") #specifying path to dll

iid_interface = dshow.CLSID_IUnknown

iid_ibasefilter = dshow.CLSID_IBaseFilter

clsid_class = UUID(dshow.CLSID_my_filter).bytes_le

iclassfactory = UUID(str(pythoncom.IID_IClassFactory)).bytes_le

com_classfactory = c_long(0)

my_dll = ctypes.oledll.LoadLibrary(dll_path)

#getting com_classfactory pointer to an adress of IClassFactory within loaded dll

hr = my_dll.DllGetClassObject(clsid_class, iclassfactory, byref(com_classfactory))

#creating class factory from adress using pythoncom

MyFactory = pythoncom.ObjectFromAddress(com_classfactory.value, pythoncom.IID_IClassFactory)

#creating COM object using IClassFactory::CreateInstance, using IUnknown as a default interface

dmx_interface = MyFactory.CreateInstance(None, iid_interface)

# I could've tried to use IBaseFilter directly,

# but pythoncom knows nothing about DirectShow interfaces!

# dmx = dmx_interface.QueryInterface(str(qedit.IBaseFilter._iid_)) #that yields an error

dmx = dmx_interface.QueryInterface(iid_ibasefilter) #that yields the same error

我得到的错误是TypeError: There is no interface object registered that supports this IID,这是可以理解的。在

所以,通信类型知道这些接口!但不幸的是,我找不到使用comtypes或甚至ctypes从dll加载COM对象的方法。在

我已经处理这个问题好几天了,如果你能给我一些建议,我将不胜感激。在



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
author-avatar
忧愁幻想_824
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有