C#:将IntPtr转换为对象数组?

时间:2016-04-13 19:31:38

标签: c# arrays pointers intptr

对于C#,我对指针知之甚少。我正在编写一些代码来访问外部第三方库(3dsmax的.NET扩展)中的函数/类。

API中的一个函数接受一个指向对象数组的指针,并从位图中的像素为这些对象指定颜色值。对象本身有4个属性 - >每个RGBA值的颜色浮动......所以它们的类基本上是这样的:

public class IBMM_Color_fl: IEquatable<IBMM_Color_fl>, IDisposable, INativeObject
{
    public float R; 
    public float G; 
    public float B; 
    public float A;
}

我用:

初始化我的指针
IntPtr pointer = Marshal.AllocHGlobal(sizeof(float)*4*numberOfPixels);

然后将其传递给API,API在指针上完成工作而不会产生任何错误。函数完成后,我想将指针转换为数组以获取像素颜色值,但不知道如何。我试过Marshal.PtrToStructure,但是我得到了错误:

The specified structure must be blittable or have layout information

当我搜索有关此错误的答案时,我读到有一些方法可以将您的类修改为blit友好,但是该类在第三方的DLL中初始化,因此我无法修改其属性。任何帮助将不胜感激。

0 个答案:

没有答案