SWIG справочный ввод, вывод пользовательского класса

0

Я пытаюсь работать с C++ lib в С# с помощью SWIG. У меня есть метод, который получает плавающие и/или uint8_t опорные входы и возвращает с помощью специального объекта класса. Невозможно применить команды SWIG для преодоления этого права.

C++:

virtual eoReturn GetValue(CHANNEL_TYPE type, float &value) {...}
virtual eoReturn GetValue(CHANNEL_TYPE type, uint8_t &value) {...}

.я:

%module eoTest
%{  
    #include "eoTest.h"  
%}  

%include typemaps.i
%include cpointer.i 
extern eoReturn eoProfile::GetValue(CHANNEL_TYPE INPUT, float &INPUT);
extern eoReturn eoProfile::GetValue(CHANNEL_TYPE INPUT, uint8_t &INPUT);
%include "eoTest.h"

Является еще SWIGTYPE_p_float и unsigned_char. Любая идея, как это решить? Или как инициализировать SWIGTYPE_p_float в С#? Это тоже поможет.

Теги:
swig
reference

1 ответ

1

Одно решение, которое нашло:

добавили в файл интерфейса следующее:

%include cpointer.i     
%pointer_functions(float, floatp);

Это создало методы с именами, такими как "new_floatp", "delete_floatp", "floatp_assign"...

Можно использовать в С# следующим образом:

SWIGTYPE_p_float f = WrapperCPP.new_floatp();
WrapperCPP.floatp_assign(f, 12);
Console.WriteLine("Value: " + WrapperCPP.floatp_value(f).ToString("0.0")); // Value: 12
WrapperCPP.delete_floatp(f);

Это будет работать так же для uint8_t, как и

%pointer_functions(unsigned char, uintp);

Надежда тоже могла помочь кому-то. ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню