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.
您还需要在项目中启用不安全的代码才能运行此代码。
- Right click on your project and select
Properties
. - Open the
Build
tab. - Select
Allow unsafe code
.
右键单击您的项目,然后选择“属性”。
打开“构建”选项卡。
选择允许不安全的代码。
#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.
您还需要在项目中启用不安全的代码才能运行此代码。
- Right click on your project and select
Properties
. - Open the
Build
tab. - Select
Allow unsafe code
.
右键单击您的项目,然后选择“属性”。
打开“构建”选项卡。
选择允许不安全的代码。
#2
2
The array will be a pointer to the elements. You use it the same way:
该数组将是指向元素的指针。你以同样的方式使用它:
IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);