Я пытаюсь работать с 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 в С#? Это тоже поможет.
Одно решение, которое нашло:
добавили в файл интерфейса следующее:
%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);
Надежда тоже могла помочь кому-то. ура