мне нужно создатжь окно специального класса. пытаюць делать следующее:
public myclass
{
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.U2)]
public static extern short RegisterClassEx([In] ref WNDCLASSEX lpwcx);
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct WNDCLASSEX
{
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public int style;
public IntPtr lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public IntPtr hInstance;
public IntPtr hIcon;
public IntPtr hCursor;
public IntPtr hbrBackground;
[MarshalAs(UnmanagedType.LPTStr)]
public String lpszMenuName;
[MarshalAs(UnmanagedType.LPTStr)]
public String lpszClassName;
public IntPtr hIconSm;
}
public delegate int WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
public int myWinProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam)
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
private WNDCLASSEX mWC;
private IntPtr mWndProcPtr;
public Class1()
{
WndProc mWndProc;
mWndProc = new WndProc(myWinProc);
mWndProcPtr = Marshal.GetFunctionPointerForDelegate(mWndProc);
mWC = new WNDCLASSEX();
mWC.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(WNDCLASSEX));
mWC.style = 0;
mWC.lpfnWndProc = mWndProcPtr;
mWC.cbClsExtra = 0;
mWC.cbWndExtra = 0;
mWC.hInstance = GetModuleHandle("My.exe");
mWC.hIcon = IntPtr.Zero;
mWC.hCursor = IntPtr.Zero;
mWC.hbrBackground = IntPtr.Zero;
mWC.lpszMenuName = "";
mWC.lpszClassName = "MyClass";
mWC.hIconSm = IntPtr.Zero;
RegisterClassEx(ref mWC);
MessageBox.Show(Marshal.GetLastWin32Error().ToString());
}
однако GetLastWin32Error выдает ошибку "2"
в чем может быть проблема?
перерыл интернет, перепробовал много вариантов но всё одно и тоже.
Попробуй вместо
public static extern short RegisterClassEx([In] ref WNDCLASSEX lpwcx);
сделать
public static extern short RegisterClassEx([In] InPtr lpwcx);
и, соответственно,
Marshal.StructureToPtr
и
RegisterClassEx(inptrStruct);
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, spectator, Вы писали:
S>Попробуй вместо
S>public static extern short RegisterClassEx([In] ref WNDCLASSEX lpwcx);
S>сделать
S>public static extern short RegisterClassEx([In] InPtr lpwcx);
S>и, соответственно,
S>Marshal.StructureToPtr
S>и
S>RegisterClassEx(inptrStruct);
Это я уже пробовал, всё равно не помогает
S>
данное сообщение получено с www.gotdotnet.ru
S>ссылка на оригинальное сообщение