tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルプリンタに生データを送信する方法
記事No3341
投稿日: 2006/03/20(Mon) 18:32
投稿者hirovox
[OSのVer]:WindowsXP    [VBのVer]:VB.NET  

hhttp://support.microsoft.com/default.aspx?scid=kb;ja;322090

上記サイトにあるコードを
そのままコピーペーストで実行させると
ローカルのプリンタでは問題なく動作するのですが、
ネットワーク接続のプリンタを選択した場合、

「PInvokeStackImbalance が検出されました。
Message: PInvoke 関数 'Form1+RawPrinterHelper::OpenPrinter' がスタックを不安定にしていま
す。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として
考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネー
ジ シグネチャに一致していることを確認してください。」

とメッセージが表示されます。

無視して「続行」をするとちゃんと動作しているのですが、
このエラーの原因、対処方法をお教えください。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: プリンタに生データを送信する方法
記事No3342
投稿日: 2006/03/20(Mon) 19:30
投稿者YAS
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

[ツリー表示へ]
タイトルRe^2: プリンタに生データを送信する方法
記事No3377
投稿日: 2006/03/22(Wed) 09:41
投稿者hirovox
YASさまありがとうございます。

コードの宣言部分を修正したところ、無事に動きました。
MSのサンプルが間違っているとは思いもしませんでしたので、
いい勉強になりました。

本当にありがとうございました。

[ツリー表示へ]