[.NET] 有關於WriteProcessMemory API 使用問題

看板Visual_Basic作者 (小張)時間15年前 (2010/06/25 18:24), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
請教各位前輩們, 我用VB 2008 版本 使用的 讀寫記憶體 的 API 函數宣告如下 Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByVal lpNumberOfBytesWritten As Integer) As Integer Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer() As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer 我一直以來總有個疑問(我是不懂中 硬去使用他) 在 RPM 的 ByRef lpBuffer As Integer 如果把他改成 ByVal 在使用這個函數時候會變成 受限制的記憶體 的錯誤訊息 而 WPM 的同樣參數 卻 不能用 Integer 去作寫入 變成必須要用 陣列方式 且還要用 Byte 去作寫入才能正常 這兩個函數是我一直以來總是不明瞭的問題 明明 參數都一樣 為何使用方式卻不一樣? 如果程式碼 寫法如下 n =4 ReadProcessMemory (hProcess, lBassAddr, s(0), n, 0&) For i = 0 To n - 1 Listbox1.Items.add ("位址:" & (i + lBassAddr) & "= " & s(i)) Next 則在listbox 中只會顯示 S(0) 的數值 且會出錯 如果在 VB6 中 卻可以正常顯示 S(0~3) 的 byte 上面的程式碼 是我已經改成 .net 版本 如果原始的 VB6 寫法是這樣 ReadProcessMemory hProcess, ByVal lBassAddr, s(0), n, ByVal 0& For i = 0 To n - 1 List2.AddItem "位址:" & (i + lBassAddr) & "= " & s(i) Next -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.63.89
文章代碼(AID): #1C98FDab (Visual_Basic)
文章代碼(AID): #1C98FDab (Visual_Basic)