3

C DLL を介して USB 周辺機器と通信する C# アプリケーションがあります。

C DLL は次の関数を実装します。

long WriteText(char* data, long length);

これを C/C++ から呼び出す場合、通常の ASCII テキストだけでなく、「£」(0x9C hex) などの拡張文字も送信できます。

ただし、これをC#クラスにまとめました

[DllImport("c:\\USBPD.DLL", EntryPoint = "WriteText")]
public static extern int WriteText(string data, int length);

ただし、「£」を含む文字列を送信すると、その場所に「u ^」が表示されます。残りの文字列は問題ありません。エンコーディングの種類をいじってみましたが、まだ問題があるようです。

ありがとうございます

4

1 に答える 1

4

やってみました:

[DllImport("c:\\USBPD.DLL")]
private static extern int WriteText([In] byte[] text, int length);

public static int WriteText(string text)
{
    Encoding enc = Encoding.GetEncoding(437); // 437 is the original IBM PC code page
    byte[] bytes = enc.GetBytes(text);
    return WriteText(bytes, bytes.Length);
}

メソッドの名前が同じ場合、EntryPoint は必要ないことに注意してください。

于 2012-04-11T17:25:01.823 に答える