在更新第三方庫以在x64上正常工作(它使用指針的int
)時,我正在查看P/Invoke簽名。P /調用指針指針?
其中一人需要
__out LPSCARDCONTEXT phContext
這在WinSCard.h
typedef ULONG_PTR SCARDCONTEXT;
typedef SCARDCONTEXT *PSCARDCONTEXT, *LPSCARDCONTEXT;
定義我不是很熟悉C++,所以糾正我,如果我錯了。這意味着LPSCARDCONTEXT
是一個指向ULONG_PTR
的指針,它也是一個指針。這也解釋了爲什麼IntPtr phContext
不起作用,並且ref IntPtr phContext
在P/Invoke簽名中起作用。
我很困惑的設計。爲什麼指向需要/使用的指針?
我不認爲你的最後一段是正確的。 「SCARDCONTEXT」讓我覺得它是一種不透明的手柄類型。然後,當使用簽名爲'__out LPSCARDCONTEXT phContext'的參數建議使用指針傳遞引用。我懷疑這實際上是C風格的代碼,並且沒有使用通過引用傳遞,因爲C只傳遞了值。 – 2011-05-17 15:52:57
接受此爲答案。我不會評論答案/討論的其他部分。 – Stijn 2011-05-17 16:04:24
@Stijn這個問題的主要問題是答案的正文是錯誤地使用術語元帥的最後一段。使用'ref'(無論如何它應該是'out'而不是'ref',但這是一個側面問題)不會導致編組。所有它確保參數的值IntPtr傳回給調用者。這裏沒有編組。 – 2011-05-17 16:11:51