如何使用ctypes打开库,使用CLSID值和C ++头文件?

时间:2017-08-17 13:17:45

标签: python c++ com ctypes

我有一个我应该使用的SDK。此SDK不记录要使用的具体dll文件。 C头文件包含类ID。还有接口和类声明。这些可以用作导出函数的参数,也可以用作返回值。

示例声明:

const CLSID CLSID_Core2 = {0x1111111D,0x111D,0x99bc,{0x99,0x99,0x99,0x99,0x99,0x99,0xff,0xaa}};

从C程序中使用它:

CComPtr<ICatalog> tprogrammers;

hr = m_Core.CoCreateInstance(CLSID_Core2);
hr = m_Core->get_Programmers(&tprogrammers);

CComPtr和ICatalog类在别处定义。 CComPtr内置于windows(https://msdn.microsoft.com/hu-hu/library/ezzw7k98.aspx)中,但ICatalog在头文件中定义,该文件是SDK的一部分。 SDK包含许多带有接口和类ID的头文件,但它不包含任何实现(C或CPP文件)。

我是否有可能使用这些头文件并使用Python中安装的SDK?

2 个答案:

答案 0 :(得分:1)

您必须使用支持IUnkwown *(或“早期绑定”)接口的comtypes包:http://pythonhosted.org/comtypes/,与仅支持IDispatch *的pywin32相反(或“后期绑定“)接口。

PS:CComPtr不是构建到Windows中的,它是随Visual Studio VC ++文件提供的辅助类。

答案 1 :(得分:0)

无需使用CLSID创建对象。只需使用人类可读的ProgID来创建对象。

AFAIK Phython使用后期绑定(IDispatch接口),因此这里不需要接口定义。