如何在非托管内存中分配IntPtr []数组?

时间:2021-01-09 21:18:40

To allocate memory in managed code i use:

要在托管代码中分配内存,我使用:

IntPtr [] params_list_n = new IntPtr [5];

But for unmanaged memory i use Marshal.AllocHGlobal And I do not understand how, in this case to allocate memory for the array.

但对于非托管内存,我使用Marshal.AllocHGlobal我不明白如何为这个数组分配内存。

Ideally I want to use the function call Marshal.GetNativeVariantForObject (o, params_list_n[i]); For each element of the array.

理想情况下,我想使用函数调用Marshal.GetNativeVariantForObject(o,params_list_n [i]);对于数组的每个元素。

2 个解决方案

#1


6  

Creating unmanaged memory using Marshal.AllocHGlobal is simple.

使用Marshal.AllocHGlobal创建非托管内存非常简单。

IntPtr pointer = Marshal.AllocHGlobal(1024);

If you need to calculate the amount of space you can use Marshal.SizeOf.

如果您需要计算空间量,可以使用Marshal.SizeOf。

int size = Marshal.SizeOf(typeof(IntPtr));
IntPtr pointer = Marshal.AllocHGlobal(size);

You will also need to enable unsafe code in your project for this to run.

您还需要在项目中启用不安全的代码才能运行此代码。

  1. Right click on your project and select Properties.
  2. 右键单击您的项目,然后选择“属性”。

  3. Open the Build tab.
  4. 打开“构建”选项卡。

  5. Select Allow unsafe code.
  6. 选择允许不安全的代码。

#2


2  

The array will be a pointer to the elements. You use it the same way:

该数组将是指向元素的指针。你以同样的方式使用它:

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);

#1


6  

Creating unmanaged memory using Marshal.AllocHGlobal is simple.

使用Marshal.AllocHGlobal创建非托管内存非常简单。

IntPtr pointer = Marshal.AllocHGlobal(1024);

If you need to calculate the amount of space you can use Marshal.SizeOf.

如果您需要计算空间量,可以使用Marshal.SizeOf。

int size = Marshal.SizeOf(typeof(IntPtr));
IntPtr pointer = Marshal.AllocHGlobal(size);

You will also need to enable unsafe code in your project for this to run.

您还需要在项目中启用不安全的代码才能运行此代码。

  1. Right click on your project and select Properties.
  2. 右键单击您的项目,然后选择“属性”。

  3. Open the Build tab.
  4. 打开“构建”选项卡。

  5. Select Allow unsafe code.
  6. 选择允许不安全的代码。

#2


2  

The array will be a pointer to the elements. You use it the same way:

该数组将是指向元素的指针。你以同样的方式使用它:

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);