RegisterClassEx problem
От: jonni  
Дата: 01.11.06 23:28
Оценка:
мне нужно создатжь окно специального класса. пытаюць делать следующее:

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"

в чем может быть проблема?

перерыл интернет, перепробовал много вариантов но всё одно и тоже.
RegisterClassEx problem
От: Аноним  
Дата: 02.11.06 07:49
Оценка:
Попробуй вместо
public static extern short RegisterClassEx([In] ref WNDCLASSEX lpwcx);
сделать
public static extern short RegisterClassEx([In] InPtr lpwcx);
и, соответственно,
Marshal.StructureToPtr
и
RegisterClassEx(inptrStruct);


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: RegisterClassEx problem
От: jonni  
Дата: 02.11.06 13:46
Оценка:
Здравствуйте, 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>ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.