C# 将类类型对象转换为Intptr

C# 将类类型对象转换为Intptr,c#,windows,interop,C#,Windows,Interop,希洛 我知道这可能很容易,但相信我,我并不是在谷歌上找到的替补。 我试图做以下事情: unsafe static IntPtr\uu converter SearcherCallbackParameter到IntPtr(SearcherCallbackParameter SearcherCallbackParameter) { return(*(IntPtr*)&searchercallback参数); } 其中SearcherCallbackParameter是一个类,我需要将其转换为IntP

希洛 我知道这可能很容易,但相信我,我并不是在谷歌上找到的替补。 我试图做以下事情:

unsafe static IntPtr\uu converter SearcherCallbackParameter到IntPtr(SearcherCallbackParameter SearcherCallbackParameter)
{
return(*(IntPtr*)&searchercallback参数);
}

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

我得到以下错误:
无法获取托管类型的地址、大小或声明指向托管类型的指针

您只需使用简单的.NET委托,互操作层将负责编组。下面的代码从中获取本机函数声明

回调函数参数只是一个整数,因此实际上不必是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);
}

CLR保留在内存中移动对象的权利,因此即使您可以获得托管对象的地址,该地址几乎肯定会很快失效。您是否介意说明您正在尝试使用哪个API调用?我正在尝试为您提供EnumWindows和EnumChildWindows,我需要向其发送指向SearcherCallbackParameter的指针(或IntPtr)。因此我的回调可以接收它。hare是我声明fcts的人:私有委托bool EnumWindowsProc(IntPtr hWnd,IntPtr lParam);[DllImport(“user32.dll”,CharSet=CharSet.Auto,SetLastError=true)]私有静态外部bool EnumWindows(EnumWindowsProc回调,IntPtr extraData);