我正在尝试使用SWIG在C#中使用C ++库。 我有一个方法,它获取float和/或uint8_t引用输入并返回自定义类对象。 无法应用SWIG命令来克服此权利。
C ++:
virtual eoReturn GetValue(CHANNEL_TYPE type, float &value) {...}
virtual eoReturn GetValue(CHANNEL_TYPE type, uint8_t &value) {...}
.I:
%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。 不知道怎么解决这个问题?或者如何在C#中初始化SWIGTYPE_p_float?这也有助于我猜测。
答案 0 :(得分:1)
找到的一个解决方案:
将以下内容添加到接口文件中:
%include cpointer.i
%pointer_functions(float, floatp);
这创建了名为'new_floatp','delete_floatp','floatp_assign'等名称的方法......
可以在C#中使用:
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);
希望也可以帮助别人。干杯