私はサードパーティのC++ライブラリ(COM経由でtypelibをエクスポート)をPythonからcomtypesモジュール経由で使用しています。
使用可能な呼び出しの1つは、次のようにOUTパラメーターを定義します。
COMMETHOD([helpstring(u'method GetPacket')], HRESULT, 'GetPacket',
( ['in'], comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.GUID, 'guid' ),
( ['in'], c_int, 'lSize' ),
( ['out'], POINTER(c_ubyte), 'pData' )),
ライブラリの作成者によって提供されたC++サンプルコードは、次のように、呼び出す前pData
に長さのバイト配列に初期化されます。lSize
GetPacket()
pPacket = new BYTE[lSize];
HRESULT hr = pData->GetPacket(guid, lSize, pPacket);
ただし、Pythonのcomtypesライブラリは、pData
-の初期値を渡す方法を提供していません。初期値なしでライブラリを呼び出すと、インタプリタはすぐにsegfaultを実行します。
Pythonからこのライブラリと相互運用することは可能ですか?理想的には、からcomtypes
ですか?