我现在正在设置 Python-C SWIG 界面。我已经通过以下命令让它生成共享对象文件:
swig -python myFile.i
gcc -c myFile.c myFile2.c myFile3.c myFile_wrap.c -IC:\myincludedirectory\include
gcc -shared myFile.o myFile2.o myFile3.o myFile_wrap.o -Ic:\myincludedirectory\libs -lpython27 -o _myfile3.o
在 myFile.i 中,我有:
/* myFile3 */
%module myFile3
%{
#include "myFile.h"
#include "defs.h"
#include "myFile2.h"
#include "myFile3.h"
%}
%include "defs.h"
%include "myFile.h"
%include "myFile2.h"
%include "myFile3.h"
defs.h 包含以下行(以及其他行):
typedef unsigned int BOOL;
typedef unsigned short WORD; //Word is 2 bytes but int* is 4 bytes ??
typedef unsigned int DWORD;
typedef unsigned long long QWORD;
typedef unsigned char BYTE;
当我尝试调用我的程序时,我在命令提示符中执行以下操作:
python
导入myFile3
myFile3.myFuncInit()
myFile3.myFuncWrite("ABCD", "ABCDEFGHI", 8);//<= 当我输入此行时出现错误。
其中 myFuncWrite 的参数为 (char *param1, const BYTE *param2, WORD param3)
我认为问题在于它是一个 const BYTE 指针。我不确定是否需要执行一些简单的辅助函数或类型映射才能使其正确通过。事实上,我一直被困在这里,我不知道我应该做什么才能让我明白我只是传递一个 BYTE 的 typedef 指针。
最佳答案
在 %include "defs.h 行之后,尝试添加此行:
%apply char* {BYTE*};
这会将所有 char* 类型映射(包括类型检查)应用于 BYTE*。有关详细信息,请阅读 SWIG 手册的以下部分:
关于python - 如何将 typedef 变量的指针实现到 SWIG 中?参数 2 类型为 'BYTE const *' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416377/