c# - SWIG 中的委托(delegate) - C#

标签 c# c++ delegates swig

(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/

相关文章:

C# DLL 配置文件不存在

c# - 找不到 System.ArgumentNullException : Value cannot be null 的修复

c# - 如何通过列名获取列索引?

c# - 什么时候在 asp.net 中使用委托(delegate)?

swift - 从 tableView 中删除 StructItem

c# - 删除 SQL 数据库中不存在的图像

c++ - 如何在 Visual Studio 2013+ 中编译包含 "interface"作为变量名的程序

main 中的 C++ 数组大小

C++, clang : #including associated header with cpp does not compile

iphone - 我应该在哪里放置委托(delegate)方法以及如何调用它们?