在C#項目中,IntPtr
類型用于表示指向非托管代碼的指針
IntPtr
作為指針參數。[DllImport("example.dll")]
public static extern int SomeNativeFunction(IntPtr parameter);
IntPtr
。例如,你可以使用 Marshal.AllocHGlobal
分配內存,然后使用 IntPtr
來引用分配的內存。int size = 1024;
IntPtr buffer = Marshal.AllocHGlobal(size);
// 對內存進行操作...
Marshal.FreeHGlobal(buffer); // 釋放內存
IntPtr
。例如,當調用 CreateWindow
函數時,需要傳遞一個指向窗口過程的指針。[DllImport("user32.dll")]
public static extern IntPtr CreateWindow(string lpClassName, string lpWindowName, uint dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
IntPtr
的 ToInt64
和 ToPointer
方法進行轉換,然后執行所需的操作。int[] data = new int[] { 1, 2, 3, 4, 5 };
int sizeOfInt = sizeof(int);
IntPtr ptr = Marshal.AllocHGlobal(data.Length * sizeOfInt);
Marshal.Copy(data, 0, ptr, data.Length);
for (int i = 0; i< data.Length; i++)
{
IntPtr currentPtr = new IntPtr(ptr.ToInt64() + i * sizeOfInt);
int value = Marshal.ReadInt32(currentPtr);
Console.WriteLine(value);
}
Marshal.FreeHGlobal(ptr);
總之,在 C# 項目中選擇合適的 IntPtr
使用策略取決于你的需求和與非托管代碼的交互方式。在處理指針和內存時,請確保正確地分配和釋放資源,以避免內存泄漏和其他問題。