1

だから私はパディングされた2つの文字列を持っていますが、今はそれらを表示したいのですが、Trim()はそれをしたくないようです。

String devicename = "".PadRight(100);

String deviceversion = "".PadRight(100);

bool isDeviceReady = capGetDriverDescriptionA(i, ref devicename, 100, ref deviceversion, 100);

後で、以下のような文字列を使用します。

Messagebox.show("Device Name="+devicename.Trim()+" , Device Version="+deviceversion.Trim());

表示されるのは「Device Name=name of the device」のみです

考え?

4

3 に答える 3

2

なぜ文字列をパディングしているのですか?後でコンテンツに置き換えられるスペースで文字列を埋めているように見えますが、あなたの質問から判断すると、なぜこれが必要なのかわかりません。何が問題なのですか:

String devicename = "";
String deviceversion = "";

bool isDeviceReady = capGetDriverDescriptionA(i, ref devicename, 100, ref deviceversion, 100);
于 2012-05-15T21:45:21.380 に答える
1

ゼロで終わる文字列を返す API 関数を呼び出すときに、StringBuilder代わりに使用してみてください。stringあなたが得ている動作は、API が文字列の最後にゼロ値を書き込む (終了するため) という事実に由来する可能性がありますが、.NET はそれをゼロ値を含む通常の文字列として扱います。

または、このディスカッション[MarshalAs(UnmanagedType.LPWSTR)]を参照してください。これは、パラメーターに属性の注釈を付けることを提案しています。次に、PInovke メカニズムは、最後にゼロ値を自動的に処理する必要があります。

于 2012-05-15T21:49:51.470 に答える
0

結局、それはかなり単純でした。TomasPetrickは正しい方向に進んでいました。返された文字列は、nullで終了する(ゼロで終了する)文字列でした。次に、文字列からnullターミネータを削除する必要がありました。

devicename = devicename.trim('\0');
于 2012-05-21T21:40:58.950 に答える