Я поддерживаю C ++ SDK, который теперь необходимо преобразовать в другие языки (в частности, C # и Java).Я использую SWIG для генерации кода оболочки и успешно завершил работу на Java.Теперь мне нужно, чтобы C # работал.
У меня есть функция C ++ (игнорируйте объект Header
в сигнатуре функции - у меня это уже получилось)
int send(Header header, char *payload);
Кроме того, яиметь класс director
в C ++, который выглядит следующим образом:
class Callbacks {
public:
virtual ~Callbacks() { }
virtual void receive(Header header, char *payload) { }
};
, который позволяет мне создавать обратные вызовы в моем коде Java и C #.
Мне нужны следующие сигнатуры функций для send
и receive
в C #:
int send(Header header, byte[] payload);
и
void receive(Header header, byte[] payload);
Кажется, что путь к типам в SWIG - это путь, так что здесь была моя попытка набора типов для C #:
%module(directors="1") example
%{
#include "example.h"
%}
%feature("director") Callbacks;
%include "arrays_csharp.i"
CSHARP_ARRAYS(char, byte)
%typemap(imtype, inattributes="[In, MarshalAs(UnmanagedType.LPArray, SizeConst=2048, ArraySubType=UnmanagedType.U1)]") char INPUT[] "byte[]"
%apply char INPUT[] {char *payload}
%include "example/include/example.h"
Результаты этого файла интерфейса получают мои нужные сигнатуры функций, но мои байтовые массивы имеют размер только 1, и я получаю только первый элемент в моих исходных буферах символов.Кажется, что SWIG интерпретировал char * как указатель на char и поэтому вставил первый элемент моего буфера char * в байтовый массив и назвал его хорошим.Но я хотел бы создать байтовый массив размером 2048 (никакой полезной нагрузки не будет иметь размер больше этого) и заполнить этот байтовый массив из буфера char *.Если это имеет какое-то значение, мой объект класса Header
имеет размер буфера char *, но я действительно мог бы беспокоиться об этом прямо сейчас и придерживался бы общего размера 2048 байт.
Мысли или помощь могли быбудьте благодарны!
@ Flexo Я видел ваши другие посты SWIG в StackOverflow, и вы, кажется, мой парень помогали мне.Скрестив пальцы, вы видите это!