aths
2005-11-01, 02:02:19
Microsoft Visual C# 2005, Express Beta.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class DISPLAY_DEVICE
{
public int cb = 0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName = new String(' ', 32);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceString = new String(' ', 128);
public int StateFlags = 0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceID = new String(' ', 128);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceKey = new String(' ', 128);
} // from http://pinvoke.net/default.aspx/Structures.DISPLAY
public class Displays
{
[DllImport("user32.dll")] static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
// from http://pinvoke.net/default.aspx/user32.EnumDisplayDevices
public Displays()
{
try
{
DISPLAY_DEVICE d = new DISPLAY_DEVICE();
d.cb = Marshal.SizeOf(d);
for (uint id = 0; EnumDisplayDevices(null, id, ref d, 0); id++)
{
// Hier werden die Member von d dann ausgwertet
}
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex.ToString(), "Bemerkung", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
finally
{
MessageBox.Show("Exception! ", "Bemerkung", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
} // proc
} // classSofern ich EnumDisplayDevices nicht auskommentiere, beendet sich das Programm beim Instanzieren von "Displays" sofort. Das Exception-Handling bringt gar nix, die Messageboxen sind nicht zu sehen. Wie debuggt man sowas?
Im Output-Fenster vom Debug steht für den Abbruch nur:
The program '[2120] test.vshost.exe: Managed' has exited with code -1073741819 (0xc0000005).
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class DISPLAY_DEVICE
{
public int cb = 0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName = new String(' ', 32);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceString = new String(' ', 128);
public int StateFlags = 0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceID = new String(' ', 128);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceKey = new String(' ', 128);
} // from http://pinvoke.net/default.aspx/Structures.DISPLAY
public class Displays
{
[DllImport("user32.dll")] static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
// from http://pinvoke.net/default.aspx/user32.EnumDisplayDevices
public Displays()
{
try
{
DISPLAY_DEVICE d = new DISPLAY_DEVICE();
d.cb = Marshal.SizeOf(d);
for (uint id = 0; EnumDisplayDevices(null, id, ref d, 0); id++)
{
// Hier werden die Member von d dann ausgwertet
}
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex.ToString(), "Bemerkung", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
finally
{
MessageBox.Show("Exception! ", "Bemerkung", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
} // proc
} // classSofern ich EnumDisplayDevices nicht auskommentiere, beendet sich das Programm beim Instanzieren von "Displays" sofort. Das Exception-Handling bringt gar nix, die Messageboxen sind nicht zu sehen. Wie debuggt man sowas?
Im Output-Fenster vom Debug steht für den Abbruch nur:
The program '[2120] test.vshost.exe: Managed' has exited with code -1073741819 (0xc0000005).