1 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
上面ref int
說(shuō)“被調(diào)用者期望一個(gè)指向 32 位整數(shù)的指針,而編組器期望它是一個(gè)托管指針”。
指向整數(shù)的托管指針和整數(shù)是兩個(gè)完全不同的東西。一種是指針大小的——通常是 64 位——另一種肯定是 32 位。一種是值,一種是描述從哪里獲取包含值的變量。它們不可互換,您需要正確使用。
如果您不清楚編組層為實(shí)現(xiàn)這一點(diǎn)而使用的約定,請(qǐng)?jiān)诰帉懜嗑幗M代碼之前弄清楚它。 您正在與一個(gè)不具有 C# 提供的類型安全或內(nèi)存安全的系統(tǒng)進(jìn)行交互,因此您需要確保保留運(yùn)行時(shí)的不變量。通常,運(yùn)行時(shí)會(huì)確保維護(hù)運(yùn)行時(shí)不變量,但您正在描述如何與運(yùn)行時(shí)之外的代碼進(jìn)行交互,因此請(qǐng)確保它是正確的。
嘗試一些東西直到它起作用并不是一個(gè)好技巧。如果繼續(xù)這樣做,您可能會(huì)引入崩潰、內(nèi)存泄漏和更微妙的錯(cuò)誤(即安全漏洞)。閱讀文檔、書籍或視頻,或者讓同事向您解釋,以便您了解其工作原理。然后您將能夠充滿信心地編寫 p/invoke 代碼,而不是猜測(cè)和希望。
- 1 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報(bào)