如何在SWIG中实现typedef'd变量的指针? “BYTE const *”类型的参数2错误

时间:2011-06-20 19:29:43

标签: 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;    

当我尝试调用我的程序时,我在命令提示符下执行以下操作:

导入myFile3

myFile3.myFuncInit()

myFile3.myFuncWrite(“ABCD”,“ABCDEFGHI”,8); //< = 我输入此行时收到错误。

其中myFuncWrite的参数是(char * param1,const BYTE * param2,WORD param3)

我认为问题在于它是一个const BYTE指针。我不确定是否需要做一些简单的辅助函数或类型映射来使其正确传递。事实上,我一直被困在这里,我不知道我应该做些什么来让swig明白我只是传递一个BYTE的typedef指针。

1 个答案:

答案 0 :(得分:3)

在%include“defs.h”行之后,尝试添加以下行:

%apply char* {BYTE*};

这将把所有char *类型映射(包括类型检查)应用于BYTE *。有关详细信息,请阅读SWIG手册的以下部分:

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