2011-11-05 81 views
0

我有一箇舊的代碼在VB.Now我轉換成vb.net.There是一條線名稱「VarPtr」不是在代碼declared.In舊的VB代碼

昏暗pCParameters作爲整數

pCParameters = VarPtr(參數)

當我執行代碼

名稱 'VarPtr' 是錯誤occure不decla紅。

VarPtr不支持在vb.net.So我如何取代它。

+3

一種解決方案可能取決於具體情況。您可以發佈代碼以瞭解如何使用pCParameters ... –

+0

pCParameters定義爲整數。 – vikky

+2

你可以在這段代碼之後顯示如何使用參數嗎?我懷疑它可能會傳遞給外部DLL函數,如果是這樣,知道這對解決方案非常重要。 –

回答

1

這不是那麼直截了當,因爲你的.NET變量是被管理的。爲了完成你所要求的工作,你需要看看GCHandle.Alloc,並固定變量,使其不能移動。然後你可以得到它的內存地址。
這樣的事情(從內存中):

GCHandle handle = GCHandle.Alloc(pCParameters , Pinned) 
IntPtr ptr = handle.AddressOfPinnedObject 
-3

是的,我找到了新的answer.The VarPtr函數是

Public Function VarPtr(ByVal e As Object) As Integer 
Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned) 
Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32 
GC.Free() 
Return GC2 
+2

代碼被破壞,只要'GCHandle'被釋放,GC可以重新定位對象'e'。如果你想保留一個對象,你必須保持'GCHandle'實例。 – Richard

+1

真正的答案是理解*原始代碼試圖做什麼*當它用這個指針叼着。在.Net中實現目標可能有更好的方法。 – MarkJ

+0

這個答案返回一個死指針,不應該被任何人使用。 – xxbbcc