簡體   English   中英

通過 PInvoke 將 byte[] 作為 IntPtr 傳遞給 memset

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM