2011-12-14 6 views
0

私はVC#V1.0 for DOS6で書かれたいくつかのソフトウェアをC#で更新しています。C# - パラレルポート状態(シンプルプッシュスイッチ)を読む

ソフトウェアの1つの側面は、単純なプッシュボタンスイッチが接続されているパラレルポートのチェックです。私は現在、スイッチが接続されている二つのピン知りませんが、私は古いプログラムのソースを持って、関連セクションは、その今

#define switch_mask  0x10 

void main(int argc, char *argv[]) 
{ 
    int NewState = 0, OldState = 0; 

    /* Check switch */ 
    NewState = _bios_printer (_PRINTER_STATUS, 0, 0); 

    if (NewState != OldState) 
    { 
    checkParallelPort (NewState); 
    OldState = NewState; 
    }  
} 

void checkParallelPort (int portState) 
{ 
    int SwitchState; 
    /* Switch bit is Active LOW */ 
    SwitchState = (portState & switch_mask) ? 1 : 0; 
} 

_bios_printer ...以下のとおりです(bios.h以内)明らかにC#では私には利用できませんが、私はこの単純な作業を行うことができる代替案を探すのに苦労しています。

_bios_printerの情報はhereです。私は読み込み/書き込みのために、.Netのパラレルポートとの間でたくさんの検索を行ってきましたが、何も私にポートステータスを提供してくれないようです。

また、DB25プラグに2つのスイッチワイヤが接続されている場合、このコード(および「ステータス」の確認方法)で結論できますか?

誰かが助けてくれればと感謝しています。 多くのおかげ

+1

_ "DOS6用のVC++ V1.0で書かれた" _、幸運にも。 –

答えて

1
それは「エラー」をチェックしているようだ

、ピン15 IIRC、これは非常にあなたのスイッチは、ピン15および18

がある間に接続し、ピン15をプルダウンする必要があり、内部でプルアップされますI/Oマップポートの読み取りを可能にするいくつかのドライバがあります。あなたはDLLの呼び出しをインポートし、確認する必要があり、その後、ほぼ確実にピンをポーリングします:!。((

私はこのインタフェースを希望やるが死んだと埋め込み返信用

+0

あなたの助けていただきありがとうございます、私はあなたの答えを使用し、下のソリューションを思い付いた! – Ian

0

感謝をここに私がなってしまったものです。.. 。

私が謝罪(C#2に換算すると、私は以下のようなものを使用 http://www.codeproject.com/KB/vb/Inpout32_read.aspx ... CodeProjectの上でこのチュートリアルを使用するときにエラーが発生した場合 - 。私は私が終了したものから、以下のコードを「言い換え」それは私のために働く!)

private void button1_Click(object sender, EventArgs e) 
{ 

     short InReg = 0x379; // Location of Port Status register 
     int NewState;   // int named NewState 

     NewState = InpOut32_Declarations.Inp(InReg); //Now NewState has the values in 'Status port' 

     MessageBox.Show(NewState); //A popup will indicate the current value of NewState 

} 

static class InpOut32_Declarations 
{ 
    [DllImport("inpout32.dll", EntryPoint = "Inp32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 

    //Inp and Out declarations for port I/O using inpout32.dll. 

    public static extern int Inp(ushort PortAddress); 
    [DllImport("inpout32.dll", EntryPoint = "Out32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 

    public static extern void Out(ushort PortAddress, short Value); 

} 

興味深いことに、私のパラレルポートは0x378ではなく0xE800から始まるので、out32メソッドはshortを受け入れ、0xE800はshortには大きすぎますので、inpout32.dllのソースを変更する必要がありました!それをunsigned shortに変更しました。

あなたのおかげでありがとう

関連する問題