我有一個非託管DLL公開一個函數,它需要一個指向數據結構的指針。我有創建數據結構並調用dll函數沒有任何問題的C#代碼。在函數調用dll的時候,指針是正確的。C#到非託管dll數據結構interop
我的問題是,該DLL保持指針結構,並在稍後的時間點使用數據結構指針。當DLL來使用指針時,它變得無效(我假設.net運行時已將內存移到其他地方)。
這個問題有什麼可能的解決方法?
可能的解決辦法我能想到的是:
- 修正數據結構莫名其妙的存儲位置?我不知道你會如何在C#中做到這一點,或者即使可以。
- 手動分配內存,以便我可以控制它,例如使用Marshal.AllocHGlobal
- 更改DLL函數合約以複製結構數據(這是我目前正在做的短期更改,但我不想根本改變dll,只要我可以幫助它這不是我的代碼開始)。
還有其他更好的解決方案嗎?
這就是我傾向於做的,+1的幫助函數的鏈接。我正在考慮做些什麼幫助功能。 – 2010-05-18 20:13:20