| 分類:[C#]
こんにちは。
PrintDlgを使用していて、x86では正常に動作していました。 今回、x64対応をすることとなりAnyCPUでコンパイルしたものを 64bitOSで動作確認していたのですが PrintDlg でダイアログが 表示されず、戻り値がfalseで返ってきます。 特にエラーなどのメッセージは表示されません。
64bitOSで PrintDlg は使用できないのでしょうか? 解決策を模索中です、情報をお持ちの方ご協力お願います。
以下ソースです。
const Int32 PD_RETURNDC = 0x100;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)] [System.Runtime.InteropServices.ComVisible(false)] internal class PRINTDLG { public Int32 lStructSize; public IntPtr hwndOwner; public IntPtr hDevMode; public IntPtr hDevNames; public IntPtr hDC = IntPtr.Zero; public Int32 Flags = PD_RETURNDC; public Int16 FromPage = 0; public Int16 ToPage = 0; public Int16 MinPage = 0; public Int16 MaxPage = 0; public Int16 Copies = 0; public IntPtr hInstance = IntPtr.Zero; public IntPtr lCustData = IntPtr.Zero; public IntPtr lpfnPrintHook; public IntPtr lpfnSetupHook = IntPtr.Zero; public IntPtr lpPrintTemplateName = IntPtr.Zero; public IntPtr lpSetupTemplateName = IntPtr.Zero; public IntPtr hPrintTemplate = IntPtr.Zero; public IntPtr hSetupTemplate = IntPtr.Zero; } [DllImport("comdlg32.dll", CharSet = CharSet.Auto)] private static extern bool PrintDlg([In, Out] PRINTDLG lppd);
public static void test() { PRINTDLG pd = new PRINTDLG(); pd.lStructSize = Marshal.SizeOf(pd); if (PrintDlg(pd) == false) return; //以下省略 }
|