2011-02-26 223 views
0

helo 我知道這可能很簡單,但請相信我,我沒有從我在google上發現的內容中讀到它。 我嘗試做如下因素的事情:將類類型對象轉換爲Intptr

unsafe static IntPtr __convertSearcherCallbackParameterToIntPtr (SearcherCallbackParameter searcherCallbackParameter) { return (*(IntPtr*)&searcherCallbackParameter); }

其中SearcherCallbackParameter是一類,我需要將其轉換爲一個IntPtr這樣我就可以把它作爲一個參數,一個Windows API。

我得到如下因素的錯誤: 不能走的地址,獲取的大小,或指針聲明到託管型

+0

CLR保留將您在內存中移動的權利,因此即使您可以獲取託管對象的地址,該地址幾乎肯定會非常快地失效。你介意說明你正在嘗試使用哪個API調用? – Jimmy 2011-02-26 08:27:53

+1

我想你EnumWindows和EnumChildWindows,我需要發送一個指針(或IntPtr)SearcherCallbackParameter。所以我的回調可以接收它。 – hgfhnfg 2011-02-26 08:30:42

+0

野兔是我聲明的fcts:private delegate bool EnumWindowsProc(IntPtr hWnd,IntPtr lParam); [DllImport(「user32.dll」,CharSet = CharSet.Auto,SetLastError = true)] private static extern bool EnumWindows(EnumWindowsProc callback,IntPtr extraData); – hgfhnfg 2011-02-26 08:31:55

回答

1

你可以只用一個簡單的.NET委託,互操作層會照顧的編組。下面的代碼從http://pinvoke.net/default.aspx/user32/EnumWindows.html

本機函數聲明回調函數參數只是一個整數,但它實際上不必是一個IntPtr。

public delegate bool CallBackPtr(int hwnd, int lParam); 


[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnumWindows(CallBackPtr lpEnumFunc, UInt32 lParam); 


static bool callbackreport(int hwnd, int lparam) 
{ 
    Console.WriteLine("{0} {1}", hwnd, lparam); 
    return true; 
} 

static void Main(string[] args) 
{ 
    EnumWindows(Program.callbackreport,0); 
} 
+0

謝謝吉米! – hgfhnfg 2011-02-26 11:14:25

相關問題