2011-07-06 166 views
6

(的http://old.nabble.com/C%2B%2B-pointer-to-method-as-parameter-to-C--td17645155.html完全重复的,但不能使所提出的宏观调控工作)代表们痛饮 - C#

我有下面的C++函数(简体):

InputPort addInputPort(void(*callback)(InputPort)); 

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

public InputPort addInputPort(SWIGTYPE_p_f__InputPort____void callback) 

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

我该如何告诉SWIG使用委托?如果解决方案涉及%typemap,对我来说是额外的耐心......

+1

我想C++/CLI不是一个选项? – 2011-07-06 19:27:52

+0

我必须进一步调查,但我担心它不会:预先编译好的大量中间件! – Calvin1602

+0

同样的问题。最初我使用PInvoke(详细问题http://stackoverflow.com/questions/11909484/how-to-use-c-sharp-backgroundworker-to-report-progress-in-native-c-code)。现在我正在尝试使用SWIG,但代码变得非常麻烦......而且我也无法实现如何与代表一起工作。 – sergtk

回答

1

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

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

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

+0

感谢您的链接。已经过去了一年,所以我甚至不再参与这个项目。但是我现在写了几个类型映射。我会尝试再看看这个。 – Calvin1602