110,572
社区成员
发帖
与我相关
我的任务
分享
NotSupportedException
位于 System.Runtime.InteropServices.Marshal.SizeOfInternal()
位于 System.Runtime.InteropServices.Marshal.SizeOf()
位于 ConsoleApplicationMarshalMSDNDemo.Program.Main()
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
namespace ConsoleApplicationMarshalMSDNDemo
{
/// <summary>
/// CALLBACK Procedure to PageSetupDlgTag structure
/// </summary>
public delegate Int32 Prn2CallBack(IntPtr hwnd, Int32 msg, Int32 wp, Int32 lp);
/// <summary>
/// PageSetupDlgTag structure
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class PageSetupDlgTag
{
public Int32 lStructSize = 0;
public IntPtr hwndOwner = IntPtr.Zero;
public IntPtr hDevMode = IntPtr.Zero;
public IntPtr hDevNames = IntPtr.Zero;
public Int32 Flags = 0;
public Point ptPaperSize;
public Rectangle rtMinMargin;
public Rectangle rtMargin;
public IntPtr hInstance = IntPtr.Zero;
public Int32 lCustData = 0;
public Prn2CallBack lpfnPageSetupHook;;//如果注释掉这三行则不会引发异常
public Prn2CallBack lpfnPagePaintHook;//如果注释掉这三行则不会引发异常
public String lpPageSetupTemplateName = null;//如果注释掉这三行则不会引发异常
public IntPtr hPageSetupTemplate = IntPtr.Zero
} //End Class PageSetupDlgTag
class Program
{
static void Main(string[] args)
{
try
{
PageSetupDlgTag PageSetup = new PageSetupDlgTag();
//下面的Marshal.SizeOf(PageSetup)引发了异常
PageSetup.lStructSize = Marshal.SizeOf(PageSetup); // 84
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
}
}
[StructLayout(LayoutKind.Sequential)]
public class PageSetupDlgTag
{
public Int32 lStructSize = 0;
public IntPtr hwndOwner = IntPtr.Zero;
public IntPtr hDevMode = IntPtr.Zero;
public IntPtr hDevNames = IntPtr.Zero;
public Int32 Flags = 0;
public Point ptPaperSize;
public Rectangle rtMinMargin;
public Rectangle rtMargin;
public IntPtr hInstance = IntPtr.Zero;
public Int32 lCustData = 0;
public IntPtr lpfnPageSetupHook;;//如果注释掉这三行则不会引发异常
public IntPtr lpfnPagePaintHook;//如果注释掉这三行则不会引发异常
public IntPtr lpPageSetupTemplateName = null;//如果注释掉这三行则不会引发异常
public IntPtr hPageSetupTemplate = IntPtr.Zero
} //End Class PageSetupDlgTag
PageSetupDlgTag PageSetup = new PageSetupDlgTag();
PageSetup.lpfnPageSetupHook=Marshal.GetFunctionPointerForDelegate(d1);
PageSetup.lpfnPagePaintHook=Marshal.GetFunctionPointerForDelegate(d2);
PageSetup.lpPageSetupTemplateName=Marshal.StringToHGlobalAuto(s1);