将类类型对象转换为Intptr

时间:2011-02-26 08:12:10

标签: c# windows interop

HELO 我知道这可能很容易,但请相信我,我没有从谷歌上发现的内容中了解它。 我试着做下面的事情:

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

其中SearcherCallbackParameter是一个类,我需要将其转换为IntPtr,以便将其作为参数传递给windows api。

我收到了以下错误: 不能获取地址,获取大小,或声明指向托管类型的指针

1 个答案:

答案 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);
}