HELO 我知道这可能很容易,但请相信我,我没有从谷歌上发现的内容中了解它。 我试着做下面的事情:
unsafe static IntPtr __convertSearcherCallbackParameterToIntPtr (SearcherCallbackParameter searcherCallbackParameter )
{
return (*(IntPtr*)&searcherCallbackParameter);
}
其中SearcherCallbackParameter是一个类,我需要将其转换为IntPtr,以便将其作为参数传递给windows api。
我收到了以下错误: 不能获取地址,获取大小,或声明指向托管类型的指针
答案 0 :(得分: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);
}