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

How to open a library with ctypes, using CLSID values and C++ header files?

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

示例声明:

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 classes 在别处定义。 CComPtr 内置于 windows ( https://msdn.microsoft.com/hu-hu/library/ezzw7k98.aspx ),但 ICatalog 是在作为 SDK 一部分的头文件中定义的。 SDK 包含许多带有接口和 class id 的头文件,但不包含任何实现(C 或 CPP 文件)。

我有机会使用这些头文件并使用 Python 中安装的 SDK 吗?

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

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

您将必须使用 comtypes 包:http://pythonhosted.org/comtypes/ 支持 IUnkwown*(或 "early-binding")接口,相反 pywin32 仅支持 IDispatch*(或 "late-binding") 接口。

PS:CComPtr 未内置于 Windows 中,它是 class 随 Visual Studio VC++ 文件提供的助手。