私はLOTUSNotesAPIに取り組んでいますが、その過程で、このように機能するようになりました。
bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile);
ここで、whileループ内で実行されるのようなC#と同等のメソッドを見つけました。最初の反復では、メソッドは正常に機能しているようです(cバージョンのコードとC#バージョンをデバッグしても結果は同じです)。しかし、2回目の反復では、dwLengthHost = 35の値を想定します。このメソッドの前に、別のメソッドを呼び出しました。
NSFDUMPReadFromFile(hCDFile, ref RecordTypeCanonicalPtr, sizeof (ushort))
fread
これは関数を呼び出して値を与えますRecordTypeCanonicalPtr=149
。しかし、その後同じメソッドが後で呼び出されるとRecordTypeCanonicalPtr
、dwLengthHost
値は自動的に変更されます。
[DllImport("msvcrt.dll")]
public static extern UInt32 fread(ref IntPtr Buffer, uint Size, uint Count, IntPtr Stream);
private bool NSFDUMPReadFromFile(IntPtr hCDFile,
ref IntPtr Buffer,
UInt32 Length)
{
UInt32 bytesRead = NotesApi.fread(ref Buffer, 1, (uint)Length, hCDFile);
/* Read bytes from the file */
if (bytesRead == Length)
return true;
else
return false;
}