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 回答