2009-12-04 116 views
2

最近,我一直在與非託管庫進行大量的交互,並且不斷地回過頭來問關於某些方法簽名的問題,因爲我不是C/C++程序員(儘管它對我來說並不完全陌生)。有些情況下,兩種不同方法中的相同類型的參數需要兩個不同的P/Invoke簽名(例如:有時我可以使用out關鍵字,有時我必須使用OutAttribute等)。我無法真正看到任何背後的推理。我可以在哪裏瞭解有關P/Invoke的更多信息?

有沒有什麼好的資源可以更好地理解非C/C++專家的P/Invoke和編組?

回答

3

的問題是,在C/C++語言不給你的方式看到該功能是否產生或消耗數據,以及是否一個參數指針指向的單個值或值的陣列。學習語言或學習P/Invoke並不能真正幫助解決這個問題,儘管它可以讓你更好地猜測它是正確的。

您只能通過了解您正在編寫P/Invoke聲明的特定本機代碼來解決這個問題。這需要它的源代碼和一些熟悉的語言。或者與代碼的原作者或所有者保持良好的工作關係。

Adam Nathan's book是標準參考。

+0

對於我目前的項目,我有非常詳細的非託管方面的文檔。但是有些情況下,例如,某個方法似乎需要一個指向單個結構體的指針,但文檔指出它會填充該參數給出的數組。我不知道如何爲這類事情寫一個等效的C#簽名。 – 2009-12-04 23:26:58

+0

那麼,如果它是一個數組,然後聲明參數爲數組[]。當然,內森可以幫助你。 – 2009-12-05 00:31:20

3
+2

我愛pinvoke.net,但我不知道我是否會派人去那裏瞭解pinvoke。雖然似乎有一個體面的'建議閱讀'部分。 – 2009-12-04 22:57:41

+0

此特定非託管庫的簽名不在PInvoke.net上。不過,我總是在使用Windows庫時使用它。我還會看看「建議閱讀」部分。謝謝。 – 2009-12-04 23:28:50

相關問題