python - 如何将 typedef 变量的指针实现到 SWIG 中?参数 2 类型为 'BYTE const *' 错误

标签 python c pointers parameters swig

我现在正在设置 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 手册的以下部分:

http://www.swig.org/Doc2.0/Typemaps.html#Typemaps_nn6

关于python - 如何将 typedef 变量的指针实现到 SWIG 中?参数 2 类型为 'BYTE const *' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416377/

相关文章:

python - Allen Brain Institute - 脑天文台示例

python - Matplotlib - 显示唯一值频率的条形图

c - 如何使用 ruby​​ ffi 附加一个返回字符串的 C 函数?

c - C 中用户输入的指针指针字符串 (char **)

python - 使用 numpy 进行高效的加权向量距离计算

python - xlrd 单元格的原始值

c - 如何将 void* 指针包装到 TCL 对象中

C:在数组中存储对堆栈变量的引用

c - 在递归中传递指针会导致段错误

c - C 中被调用函数的返回值