0
我的工作在Lotus Notes的API,我來到了一個點的過程中,其中fucntio像這樣,C法FREAD()等同於C#
bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile);
現在,我發現了一些C#等效的方法一樣,它在while循環內運行。在第一次迭代中,該方法似乎工作正常(當我調試c版本的代碼和C#版本時,結果相同)。但在第二次迭代中說這個方法我打電話另一個方法
NSFDUMPReadFromFile(hCDFile, ref RecordTypeCanonicalPtr, sizeof (ushort))
它調用fread
功能並給出值RecordTypeCanonicalPtr=149
之前假設dwLengthHost = 35, 的值。但之後,當相同的方法稍後調用時,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;
}
您好,感謝您的回覆。 實際上我必須使用指針,並且此方法用於不同的條件。在某些情況下,它會返回databuffer,一些套管記錄類型。所以不要認爲上述方法適用於所有情況。 – Binayacharya 2013-03-10 08:55:46
你在使用IntPtr還是使用文件中光標位置的指針? 如果您正在使用IntPtr,則無法讀取適合您的文件的方法。但是,無論如何,只要您需要使用['Marshal.Copy'](http://msdn.microsoft.com/ru-ru/library/system)將字節數組複製到非託管內存中,就可以使用建議的方式來讀取文件。 runtime.interopservices.marshal.copy.aspx) – 2013-03-10 18:29:34
大家好,其實我發現mscrolib.dll幫我了。 – Binayacharya 2013-06-04 07:56:56