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

2 投票
1 回答
1318 浏览
提问于 2025-04-16 19:56

我正在设置一个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

import myFile3

myFile3.myFuncInit()

myFile3.myFuncWrite ("ABCD", "ABCDEFGHI", 8); // <= 当我输入这一行时出现错误。

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

我认为问题出在const BYTE指针上。我不确定是否需要做一些简单的辅助函数或者使用类型映射来正确传递它。现在,我一直卡在这里,不知道该怎么做才能让swig明白我只是传递了一个BYTE的类型定义指针。

1 个回答

3

在 %include "defs.h" 这一行后,试着加上这一行:

%apply char* {BYTE*};

这样做会把所有的 char* 类型映射(包括类型检查)应用到 BYTE* 上。想了解更多,可以看看 SWIG 手册的以下部分:

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

撰写回答