对于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中初始化,因此我无法修改其属性。任何帮助将不胜感激。