次のメソッドが定義されています。
internal string GetInformation(string recordInformation)
{
int bufferSize = GetBufferSize(recordInformation);
string outputRecord;
IntPtr output = Marshal.AllocHGlobal(bufferSize);
try
{
_returnCode = UnmanagedMethod(recordInformation, output, recordInformation.Length);
byte[] outputData = new byte[bufferSize];
Marshal.Copy(output, outputData, 0, bufferSize);
outputRecord = ASCIIEncoding.ASCII.GetString(outputData, 0, bufferSize);
}
finally
{
Marshal.FreeHGlobal(output);
}
return outputRecord;
}
このメソッドでは、提供された文字列 (recordInformation) が C で記述されたメソッド (UnmanagedMethod) に渡されます。このメソッドについて私が持っているドキュメントに基づいて、bufferSize は適切に設定されています。ただし、Marshal.Copy は代わりに、recordInformation.Length のサイズの配列を作成します。ray を outputRecord 変数に割り当てたとき、文字列の内容は bufferSize の長さです。ただし、recordInformation.Length フィールドに到達するまで、文字列の残りを埋める NUL (文字 0) がいくつかあります。UnmanagedMethod パラメータ リストの最後のパラメータを bufferSize に変更すると、出力文字列は NUL 文字だけになります。
マーシャリングが間違っていますか、または文字列がバイト配列から作成された後に NUL 文字を削除する方法はありますか?
ありがとう