- 日時: 2007/09/12 22:10
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[印刷関係][][] * * キーワード:プリンタ,文書番号 : 322090,サポート技術情報,,, * ***********************************************************************************
元質問:プリンタに生データを送信する方.. - hirovox 2006/03/20-18:32 No.3341
Visual Basic .NET を使って、プリンタに生データを送信する方法。 http://support.microsoft.com/default.aspx?scid=kb;ja;322090
上記サイトにあるコードをそのままコピーペーストで実行させるとローカルのプリンタでは問題なく動作するのですが、ネットワーク接続のプリンタを選択した場合、「PInvokeStackImbalance が検出されました。 Message: PInvoke 関数 'Form1+RawPrinterHelper::OpenPrinter' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一致していることを確認してください。」
とメッセージが表示されます。
無視して「続行」をするとちゃんと動作しているのですが、このエラーの原因、対処方法をお教えください。
----------------------------------------------------------------------------------- Re: プリンタに生データを送信す.. - YAS 2006/03/20-19:30 No.3342 -----------------------------------------------------------------------------------
DllImportの宣言が間違っているのではないでしょうか?(自信ないけど) 例えば,OpenPrinterの宣言にpd As Longとありますが,Longの訳がないと思うんですが... IntPtrに変えて試してみてください。 (MSのサンプルはときどき間違っていてそのまま実行できないことがあると思います)
Public Shared Function OpenPrinter(ByVal src As String, _ ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean End Function
Public Shared Function OpenPrinter(ByVal src As String, _ ByRef hPrinter As IntPtr, ByVal pd As IntPtr) As Boolean End Function
|