SWIG的代表 - C#

Cal*_*602 6 c# c++ swig delegates

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

我有以下C++函数(简化):

InputPort addInputPort(void(*callback)(InputPort));
Run Code Online (Sandbox Code Playgroud)

问题:生成的C#函数的签名是:

public InputPort addInputPort(SWIGTYPE_p_f__InputPort____void callback)
Run Code Online (Sandbox Code Playgroud)

SWIGTYPE_p_f__InputPort____void 不是委托(并且无论如何也没有公共构造函数),所以我不能使用addInputPort.

如何告诉SWIG使用代理呢?如果解决方案涉及%typemap,额外耐心等待我...

Ped*_*rão 1

解决方案涉及 %typemap。您看到的效果是未知类型的默认无用映射。在您的情况下,未知类型是 function type void *(InputPort)

事实上,SWIG 的所有翻译都是基于 %typemaps 的,这些映射已经在标准 SWIG 库中编写并存在。您可以在此Subversion 位置调查 C# 的初始 %typemaps 。

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