Преобразование буферов char * в байтовые массивы при использовании SWIG и C # - PullRequest
1 голос
/ 20 мая 2019

Я поддерживаю 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, и вы, кажется, мой парень помогали мне.Скрестив пальцы, вы видите это!

...