[英]Passing byte[] as IntPtr by PInvoke to memset
我需要將一個字節數組傳遞給 memset,由於 P/Invoke 笨拙需要 IntPtr。 手工測試,它有效,但我正在尋求理論上的確認。 這個方法正確嗎?
[DllImport("msvcrt.dll", EntryPoint = "memset", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr MemSet(IntPtr dest, int c, int count);
static unsafe void ZeroMemset (byte[] data)
{
fixed (byte* bytes = data) {
MemSet ((IntPtr)bytes, 0, data.Length);
}
}
您的代碼很好,可以正常工作。
在我看來,避免unsafe
並將memset
的參數聲明為byte[]
是完全合理的,而且在我看來更清晰。 我會這樣聲明:
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr memset(byte[] dest, int c, IntPtr count);
請注意,最后一個參數是size_t
,它是指針大小。
我也想知道您為什么選擇在非托管代碼中執行此操作,但大概您有自己的理由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.