Как реализовать указатель переменной typedef'd в SWIG? Ошибка аргумента 2 типа 'BYTE const *' - PullRequest
2 голосов
/ 20 июня 2011

Я сейчас настраиваю интерфейс 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;    

Когда я пытаюсь вызвать мою программу, в командной строке я делаю следующее:

питон

import myFile3

myFile3.myFuncInit () * * тысяча двадцать-одна

myFile3.myFuncWrite ("ABCD", "ABCDEFGHI", 8); // <= <strong>Я получаю сообщение об ошибке при вводе этой строки.

где параметры myFuncWrite (char * param1, const BYTE * param2, WORD param3)

Я полагаю, что проблема заключается в том, что это постоянный указатель BYTE. Я не уверен, что мне нужно сделать какую-нибудь простую вспомогательную функцию или карту типов, чтобы она прошла правильно. На самом деле, я застреваю здесь и не знаю, что мне нужно сделать, чтобы понять, что я просто передаю указатель на typedef BYTE.

1 Ответ

3 голосов
/ 29 июня 2011

После строки% include "defs.h попробуйте добавить эту строку:

%apply char* {BYTE*};

Это будет применять все типографские карты char * (включая проверку типов) к BYTE *. Подробнее об этомпрочтите следующий раздел руководства SWIG:

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

...