如何调用API函数RegisterClass?
不知道API函数RegisterClass如何调用?请高手不吝指教!
我在使用的时候总是报错
System.Runtime.InteropServices.MarshalDirectiveException:PInvoke限制:无法返回变量。
我是这样定义WNDCLASS结构的:
[StructLayout(LayoutKind.Sequential)]
public class WNDCLASS
{
public uint style;
[MarshalAs(UnmanagedType.FunctionPtr)]
public Delegate lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public IntPtr hInstance;
public IntPtr hIcon;
public IntPtr hCursor;
public IntPtr hbrBackground;
public string lpszMenuName;
public string lpszClassName;
}
调用代码如下:
WNDCLASS wndclass = new WNDCLASS();
wndclass.style = (uint)winuserH.CS_HREDRAW | (uint)winuserH.CS_VREDRAW;
wndclass.lpfnWndProc = new WndProcDelegate(WndProc);
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = user32.LoadIcon(IntPtr.Zero,winuserH.IDI_APPLICATION);
wndclass.hCursor = user32.LoadCursor(IntPtr.Zero,winuserH.IDC_ARROW);
wndclass.hbrBackground = user32.GetStockObject(0);
wndclass.lpszMenuName = null;
wndclass.lpszClassName = szAppName;
try
{
user32.RegisterClass( wndclass);
}
catch(System.Runtime.InteropServices.MarshalDirectiveException mye)
{
Console.WriteLine(mye.Message);//结果在这儿报错
return;
}
.......
public delegate object WndProcDelegate(IntPtr hwnd,uint message,object wParam,object lParam);
public static object WndProc(IntPtr hwnd,uint message,object wParam,object lParam)
{
.....
}