(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
不是委托(delegate)(并且没有公共(public)构造函数),所以我不能使用 addInputPort。
如何让 SWIG 改用委托(delegate)?如果解决方案涉及 %typemap,请对我格外耐心...
最佳答案
解决方案涉及 %typemap。您看到的效果是未知类型的默认无用映射。在您的例子中,未知类型是函数类型 void *(InputPort)
。
事实上,SWIG 的所有翻译都基于已经编写并存在于标准 SWIG 库中的 %typemaps。您可以在此 Subversion location 中研究 C# 的初始 %typemaps .
特别是,在 csharphead.swg 中查找 SWIGStringHelper
.该代码将委托(delegate)映射到 C 回调。诀窍是在 SWIG 模块中添加辅助回调实现。
关于c# - SWIG 中的委托(delegate) - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599373/