2011-07-06 82 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