SWIG - c#中的委托

Delegates in SWIG - C#

本文关键字:SWIG      更新时间:2023-10-16

(完整复制http://old.nabble.com/C%2B%2B-pointer-to-method-as-parameter-to-C--td17645155.html,但无法使建议的宏工作)

我有以下c++函数(简化):
InputPort addInputPort(void(*callback)(InputPort));
问题:生成的c#函数的签名是:
public InputPort addInputPort(SWIGTYPE_p_f__InputPort____void callback)

SWIGTYPE_p_f__InputPort____void不是委托(并且没有公共构造函数),所以我不能使用addInputPort。

我如何告诉SWIG使用委托代替?如果解决方案涉及%typemap, 对我格外耐心…

解决方案涉及到%typemap。您看到的效果是未知类型的默认无用映射。在您的示例中,未知类型是函数类型void *(InputPort)

实际上,所有SWIG的翻译都是基于已经编写并存在于标准SWIG库中的%typemaps。您可以在这个Subversion位置研究c#的初始%类型映射。

特别是在csharphhead .swg中查找SWIGStringHelper。该代码将委托映射到C回调。诀窍是在SWIG模块中添加一个helper回调实现。