【问题标题】:How to cast 'System.IntPtr' to 'float[]'?如何将“System.IntPtr”转换为“float[]”?
【发布时间】:2015-02-25 10:28:46
【问题描述】:

我怎样才能得到这个IntPtrfloat[] 以便我可以对其进行操作? 或者请告诉我任何方法都可以操作。 (我尝试过使用 Array、Marshaling 但都不起作用。) 请参阅以下内容。

任何帮助将不胜感激!

IntPtr pt = IntPtr.Zero;
Camera.Memory.ToIntPtr(s32MemID, out pt);

MIL.MbufPut(MilImage, pt); 

> C:\Ctest\idsCS\idsCS\Form1.cs(100,35): error CS1503: Argument '2': cannot convert from 'System.IntPtr' to 'float[]'

这些方法的语法

uEye.Memory.ToIntPtr(out System.IntPtr ptr)
**uEye.Memory.ToIntPtr**(int s32MemId, out System.IntPtr ptr)

说明
返回指向活动/给定图像内存 ID 的图像内存的指针。

参数

s32MemId(Image memory ID)

ptr(Pointer to the image memory)
  void **MbufPut**(
  MIL_ID DestBufId,  //in  
const void *UserArrayPtr  //in  
)

【问题讨论】:

    标签: c# converter


    【解决方案1】:

    【讨论】:

    • 那么,实现这一点的唯一方法是使用数据副本? OP 在这一点上还不清楚。
    • @John Not (我知道) 使用托管安全数组,您需要为此复制它。如果可以使用unsafe,则可以直接使用指针,只要(在这种情况下),float 数据结构相同。在不安全的块中,您可以使用float *pointer = (float *)myIntPtr.ToPointer(),然后将pointer 用作不安全的“数组”(pointer[offset]
    【解决方案2】:

    现在,我会使用 Span

    IntPtr ptr = ... ;
    Span<T> sp = new Span<T>((T*)ptr, ...);
    

    但这仍然有一些限制。考虑到 Span 是一个只读结构,只能在堆栈上分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2021-11-08
      • 2011-06-17
      • 2011-11-02
      • 2023-02-07
      • 2021-11-28
      相关资源
      最近更新 更多