我用某API得到一個結構,現在我想得到這個結構的地址,有什么辦法嗎?
網上找了一些答案,如:
實體變數:long il_menuDataPointer
menuitemdata lpmenuitemdata
//下面代碼將lpmenuitemdata 的內容復制到記憶體塊il_menuDataPointer中
lpmenuitemdata.hmenu = 12345
lpmenuitemdata.level = 1
il_menuDataPointer= LocalAlloc(0,6) //6=sizeof(menuitemdata)
CopyMemory(il_menuDataPointer,lpmenuitemdata,6)
//那么,如果再從記憶體塊中取出來呢??
CopyMemory(lpmenuitemdata, il_menuDataPointer,6)//很簡單吧!
//現在,我不需要 il_menuDataPointer這塊記憶體了
LocalFree(il_menuDataPointer)
但,這個應該是首先用LocalAlloc分配了記憶體,il_menuDataPointer這個就是地址,再寫入內容,而我的情況結構已存在,然后想獲得這個結構的地址,各位高手,請多支招,謝謝了。
uj5u.com熱心網友回復:
估計得需要用到pbni來解決了。uj5u.com熱心網友回復:
__stdcall long getPointer(void *p)
{
return (long)p;
}
function long GetPointer(ref 結構 p) library "..." ....
uj5u.com熱心網友回復:
如果不使用PBNI或者不為此特別做一個DLL的話(如LS如示),那么可以使用一個中間記憶體來實作資料拷貝:menuitemdata MenuItemData,ExistMenuItemData
constant ulong cbSize=6 //6=sizeof(menuitemdata)
ulong tempMem=LocalAlloc(0,cbSiz)
MenuItemData.hmenu = 12345
MenuItemData.level = 1
//拷貝到臨時記憶體中
CopyMemory(tempMem,MenuItemData,cbSize)
//從臨時記憶體中拷出
CopyMemory(ExistMenuItemData, tempMem,cbSize)
//Free Memory
LocalFree(tempMem)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62165.html
標籤:API 調用
