1

構造体の配列を渡す必要がある C 関数をラップしようとしています。

私の .i ファイルの関数定義は次のとおりです。

extern HRESULT WINAPI ScriptItemize(
const WCHAR           *pwcInChars,    // In   Unicode string to be itemized
int                   cInChars,       // In   Codepoint count to itemize
int                   cMaxItems,      // In   Max length of itemization array
const SCRIPT_CONTROL  *psControl,     // In   Analysis control (optional)
const SCRIPT_STATE    *psState,       // In   Initial bidi algorithm state (optional)
SCRIPT_ITEM           *pItems,        // Out  Array to receive itemization
int                   *pcItems);      // Out  Count of items processed (optional)

構造体 SCRIPT_CONTROL、SCRIPT_STATE、および SCRIPT_ITEM はすべて、.i ファイルで事前に定義されています。

次の行を含めることで、pcItems が戻り値であることを示すことができます。

%include <typemaps.i>
%apply int *OUTPUT {int *pcItems};

ただし、pItems で同じことをしようとしています。

%apply SCRIPT_ITEM *OUTPUT {SCRIPT_ITEM *pItems};

次の警告が表示されます。

Can't apply (SCRIPT_ITEM *OUTPUT). No typemaps are defined.

pItems が戻り値であることを示すにはどうすればよいですか?

また、Python 内から SCRIPT_ITEM 構造体の配列を作成するにはどうすればよいですか?

4

1 に答える 1

2

.i ファイルを次のように変更することで、これを行う方法を見つけることができました。

%include <carrays.i>

%array_class(SCRIPT_ITEM, SCRIPT_ITEM_ARRAY);

extern HRESULT WINAPI ScriptItemize(
const WCHAR           *pwcInChars,    // In   Unicode string to be itemized
int                   cInChars,       // In   Codepoint count to itemize
int                   cMaxItems,      // In   Max length of itemization array
const SCRIPT_CONTROL  *psControl,     // In   Analysis control (optional)
const SCRIPT_STATE    *psState,       // In   Initial bidi algorithm state (optional)
SCRIPT_ITEM_ARRAY     *pItems,        // Out  Array to receive itemization
int                   *pcItems);      // Out  Count of items processed (optional)
于 2012-12-24T12:11:04.947 に答える