最近,我一直在與非託管庫進行大量的交互,並且不斷地回過頭來問關於某些方法簽名的問題,因爲我不是C/C++程序員(儘管它對我來說並不完全陌生)。有些情況下,兩種不同方法中的相同類型的參數需要兩個不同的P/Invoke簽名(例如:有時我可以使用out
關鍵字,有時我必須使用OutAttribute
等)。我無法真正看到任何背後的推理。我可以在哪裏瞭解有關P/Invoke的更多信息?
有沒有什麼好的資源可以更好地理解非C/C++專家的P/Invoke和編組?
最近,我一直在與非託管庫進行大量的交互,並且不斷地回過頭來問關於某些方法簽名的問題,因爲我不是C/C++程序員(儘管它對我來說並不完全陌生)。有些情況下,兩種不同方法中的相同類型的參數需要兩個不同的P/Invoke簽名(例如:有時我可以使用out
關鍵字,有時我必須使用OutAttribute
等)。我無法真正看到任何背後的推理。我可以在哪裏瞭解有關P/Invoke的更多信息?
有沒有什麼好的資源可以更好地理解非C/C++專家的P/Invoke和編組?
的問題是,在C/C++語言不給你的方式看到該功能是否產生或消耗數據,以及是否一個參數指針指向的單個值或值的陣列。學習語言或學習P/Invoke並不能真正幫助解決這個問題,儘管它可以讓你更好地猜測它是正確的。
您只能通過了解您正在編寫P/Invoke聲明的特定本機代碼來解決這個問題。這需要它的源代碼和一些熟悉的語言。或者與代碼的原作者或所有者保持良好的工作關係。
Adam Nathan's book是標準參考。
我愛pinvoke.net,但我不知道我是否會派人去那裏瞭解pinvoke。雖然似乎有一個體面的'建議閱讀'部分。 – 2009-12-04 22:57:41
此特定非託管庫的簽名不在PInvoke.net上。不過,我總是在使用Windows庫時使用它。我還會看看「建議閱讀」部分。謝謝。 – 2009-12-04 23:28:50
對於我目前的項目,我有非常詳細的非託管方面的文檔。但是有些情況下,例如,某個方法似乎需要一個指向單個結構體的指針,但文檔指出它會填充該參數給出的數組。我不知道如何爲這類事情寫一個等效的C#簽名。 – 2009-12-04 23:26:58
那麼,如果它是一個數組,然後聲明參數爲數組[]。當然,內森可以幫助你。 – 2009-12-05 00:31:20