現在、C#でシステムを作っています。
自作の印刷プレビュー画面にて、印刷ボタン、余白設定、レポート設定ボタンを配置し、
其々のボタンを押下した際の情報を保持し、印刷時に反映させるようになっています。
開発、実行OS:Windows10 64bit
開発ツール:VisualStudio2017
フレームワーク:4.6.2
ビルドの際、プラットフォームは、64bitを使用
プリンタ情報を読み込む為のロジックにて、★印の部分でエラーが発生します。
/// <summary>
/// プリンター情報を読み込む
/// </summary>
/// <param name="doc">ドキュメント</param>
/// <returns>ポインタ</returns>
private IntPtr mintLoadPrinterSetting(Document doc)
{
IntPtr devPtr;
// 設定ファイル名 string wstrFileName = Path.Combine(Application.StartupPath, mstrPrtSetNmReplace(doc.Printer.PrinterSettings.PrinterName) + ".prt"); // ファイルが存在する場合 if (File.Exists(wstrFileName)) { using (FileStream fs = new FileStream( wstrFileName, FileMode.Open, FileAccess.Read)) { // 読み込み byte[] setting = new byte[fs.Length]; fs.Read(setting, 0, (int)fs.Length); // グローバル領域にメモリー確保 devPtr = Marshal.AllocHGlobal(setting.Length); // 設定コピー Marshal.Copy(setting, 0, devPtr, setting.Length); // ファイルクローズ fs.Close(); } } else { devPtr = Marshal.AllocHGlobal(doc.Printer.PrinterSettings.GetHdevmode()); ★ } return devPtr;
}
エラーメッセージ:
プログラムの実行を続行するための十分なメモリがありませんでした。
試したこと:
ビルドの際、プラットフォームを、32bitを使用したところ、エラーは発生しませんでした。
デバック時に doc.Printer.PrinterSettings.GetHdevmode() の内容を確認したところ、
64bit実行時:0x000001d532fe02d8
32bit実行時:0x13893020
でした。
実行環境のメモリ使用量は、32bit実行時も、64bit実行時も変わらず、
めいっぱい使っているようには見受けられません。(実行環境は、メモリ8GB搭載)
32bitと64bitでポインタの扱いが違うといった情報は
いろいろと出てくるのですが、対処方法が分かりません。
エラーの原因、対処法について、教えて頂きたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/17 04:30