- - PR -
VB.NETでのパラレルポートへの印刷について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-21 20:05
OS:Windows2000
言語:VB.NET 2003 APP:Windowsアプリ プリンタへ制御コマンドを送りたいのですが、 VB6で開発していたときは下記のような方法で可能でした。 Dim intFileNo As Integer intFileNo = FreeFile Open "LPT1" For Output As #intFileNo Print #intFileNo, Chr(27) & "W1" '制御コマンド Print #intFileNo, "TEST" '印字文字 Close #intFileNo VB.NETで同じようにしたとき Dim intFileNo As Integer = FreeFile() FileOpen(intFileNo, "LPT1", OpenMode.Output, OpenAccess.Write) Print(intFileNo, Chr(27) & "W1") '制御コマンド Print(intFileNo, "TEST") '印字文字 FileClose(intFileNo) FileOpenのところでエラーとなります。 何か良い方法がございますでしょうか? また、代替案でも構いませんので皆様のご助言を頂きたく宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-02-22 07:26
せめてなんと言うエラーが発生したのかは書くこと。
基本的には出来るはず。これが出来ないと、シリアルポートを使ったプログラムもかけないと言う話になります。一度シリアル通信を行うサンプルを参考にしては如何でしょう? | ||||||||
|
投稿日時: 2006-02-22 08:58
甕星様、早速のご返答ありがとうございます。
すみません、下記のようなエラーメッセージが表示されます。 'System.ArgumentException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : FileStream で、ディスク パーティションおよびテープ ドライブなどの Win32 デバイスを開くことはできません。パスに "\\\\.\\" を使用しないでください。 宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-02-22 09:33
うろ覚えですが、「lpt1:」じゃなかったでしたっけ。
| ||||||||
|
投稿日時: 2006-02-22 10:03
mio様、ご返信ありがとうござます。
「lpt1:」にしてみましたが、同じエラーメッセージが表示 されました。 やはりこの方法では無理なのでしょうか? | ||||||||
|
投稿日時: 2006-02-22 11:00
こんにちは。
.NET(とくにVB.NET)について詳しくないのですが… エラー情報を見ると FileOpenの内部では、FileStreamクラスが使用されていて FileStreamクラスはWin32デバイス(LPT)を開くことができない ということなんですね。 やっぱり直接Win32APIを使うことになるんでしょうかね? 多分こんな感じ↓
#ラインプリンタの(遅い)印字が終わるまで待機したくない場合は、 WriteFileのところでオーバーラップI/Oを使用するのがよいと思います。 [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-02-22 11:10 ] | ||||||||
|
投稿日時: 2006-02-22 11:44
こんにちは。
追記です。
CodeProjectに、こんなソースコードがありました。 COM port made simple with VB.NET ソースコードをダウンロードするとLPTクラス(LPT.vb)という、Win32APIのラッパークラスがあります。 #見た感じ、簡単に自作できそうな感じのものですが… よろしければ、試してみてはいかがでしょう? [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-02-22 11:52 ] | ||||||||
|
投稿日時: 2006-02-22 12:59
Tdnr_Sym様、ご返信ありがとうございます。
CodeProjectからソースコードをダウンロードしてみました。 早速、試してみたいと思います。 |