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

C#:将IntPtr转换为对象数组?,c#,arrays,pointers,intptr,C#,Arrays,Pointers,Intptr,说到C#,我对指针知之甚少。我正在编写一些代码来访问外部第三方库(3dsmax的.NET扩展)中的函数/类 API中的一个函数获取指向对象数组的指针,并根据位图中的像素为这些对象指定颜色值。对象本身有4个属性->一种颜色的每个RGBA值都有一个浮点值…因此它们的类基本上是这样布置的: public class IBMM_Color_fl: IEquatable<IBMM_Color_fl>, IDisposable, INativeObject { public float

说到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;
}
然后将其传递给API,API在指针上执行其工作,而不会生成任何错误。函数完成后,我想将指针转换为数组以获得像素颜色值,但不知道如何转换。我尝试了Marshal.PtrToStructure,但出现错误:

The specified structure must be blittable or have layout information

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

[StructLayout(LayoutKind.Sequential)]
如果您真的希望成为
。看不到IDisposable的意义,所以它可以是一个结构,你应该这样做。这个类不是我写的,它包含在第三方的DLL中…所以我不能更改它。当时似乎有点不对劲。使用
IBMM\u Color\u fl
什么是
INativeObject
显示您调用的方法的签名?这似乎和你想做的事情有关。作为一种变通方法,您可以创建一个与该类等效的
struct
,将其用于与非托管代码通信,然后将其转换为该类。“作为一种变通方法,您可以创建一个与该类等效的struct,将其用于与非托管代码通信,然后将其转换为该类。”谢谢,这是让它工作的关键。我猜被继承的类中有封送员不喜欢的成员。
[StructLayout(LayoutKind.Sequential)]
如果你真的希望它是一个
类的话。看不到IDisposable的意义,所以它可以是一个结构,你应该这样做。这个类不是我写的,它包含在第三方的DLL中…所以我不能更改它。当时似乎有点不对劲。使用
IBMM\u Color\u fl
什么是
INativeObject
显示您调用的方法的签名?这似乎和你想做的事情有关。作为一种变通方法,您可以创建一个与该类等效的
struct
,将其用于与非托管代码通信,然后将其转换为该类。“作为一种变通方法,您可以创建一个与该类等效的struct,将其用于与非托管代码通信,然后将其转换为该类。”谢谢,这是让它工作的关键。我猜被继承的类中有元帅不喜欢的成员。
The specified structure must be blittable or have layout information