3

c# でシリアル ポート リダイレクタを記述する方法はありますか? ポート 1 (com1:) を使用するようにコーディングされたアプリがありますが、ハンドヘルド (Intermec CN50) のポートは常に 3 です。モバイル ソフトウェアを変更するアクセス権はありませんが、送信されるデータをリダイレクトしたいと考えています。 1 にコピーして 3 にコピーし、入ってくるデータを 3 から 1 にコピーするため、アプリは違いを認識しません。

これが難しい問題であることは承知していますが、どなたかが答えを持っていると確信しています。

私は確かにいけません。

ありがとうクリス

4

1 に答える 1

3

いいえ、ありません。デバイスと正確なニーズに応じて、いくつかの選択肢があります。

最初の最も簡単な方法は、ドライバーをリダイレクトすることです。 デバイスに COM1 デバイスがまだ定義されていない場合は、レジストリを変更HKLM\drivers\builtinして、特定のポートのインデックスを から に変更3できます1。これにより、device.exe はポートを COM3 ではなく COM1 として公開します。ただし、私の経験では、ほとんどのシリアル ポートは OS がインデックスを自動割り当てできるように設定されているため、これは機能しない可能性があります。つまり、COM1 と COM2 は既に使用されています。ただし、これを回避することはできます。デバイスの 3 以下のすべてのインスタンスにインデックスを明示的に割り当てるだけです。インデックス 1 を 3 に、インデックス 3 を 1 に移動すると、ポートが効果的にスワップされます。

OEM がドライバーの初期化をセットアップする方法に依存するため、いくつかの例を次に示します。明示的なポート名のないドライバーの例を次に示します (この場合は I2C ですが、同じように動作します)。

ポートのないドライバー

Prefixとがあることに注意してくださいIndex。このドライバーは、「I2C0:」として列挙されます。値を「2」などの別の値に変更するIndexと、「I2C2:」として列挙されます。

場合によっては、ドライバーは次のような特定のポート名を提供できます。

ここに画像の説明を入力

ここで、値がplus にPort一致することに注意してください。手動で設定を変えたらどうなるか分からないので、そうしないでください。これを COM3 に移動したい場合は、3 とCOM3 に変更しますが、これらの値を使用するように設定されたレジストリが他にないことを確認する必要があります。2 つのドライバー インスタンスが同じインデックスで列挙しようとするのは望ましくありません。そうする場合、2番目の値がインクリメントされるだけの動作だと思いますが、何が起こっているのかがわかるように、値を一意として明示的に設定するのが最善です。PrefixIndexIndexPort

それがニーズを満たさない場合は、ポートの移動/集約を行うために実際のデバイス ドライバーを作成する必要があります。これは、Windows Mobile の既存の GPS 中間ドライバー (GPSID) とよく似た働きをし、シリアル データを任意のポートにリダイレクトできます。ただし、マネージ コード (CF 内) はネイティブ シンボルをエクスポートできないため、device.exe を取得して C# アセンブリを読み込む方法がないため、これは C で記述する必要があります。

于 2012-05-14T16:54:51.503 に答える