Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为CvMat.data union创建C#结构,或以任何方式在C中访问它#_C#_C++_Data Structures_Opencv_Emgucv - Fatal编程技术网

为CvMat.data union创建C#结构,或以任何方式在C中访问它#

为CvMat.data union创建C#结构,或以任何方式在C中访问它#,c#,c++,data-structures,opencv,emgucv,C#,C++,Data Structures,Opencv,Emgucv,我需要访问“数据”属性EmguCV MCvMat结构。但该属性是指针(IntPtr)。我发现这个属性(数据)的结构是一个并集。是这样的: union Data { char* ptr; // Data pointer for an unsigned char matrix short* s; // Data pointer for a short matrix int* i; // Data pointer for an integer m

我需要访问“数据”属性EmguCV MCvMat结构。但该属性是指针(IntPtr)。我发现这个属性(数据)的结构是一个并集。是这样的:

union Data
{
    char* ptr;     // Data pointer for an unsigned char matrix
    short* s;      // Data pointer for a short matrix
    int* i;        // Data pointer for an integer matrix
    float* fl;     // Data pointer for a float matrix
    double* db;    // Data pointer for a double matrix
} Data;
我试图在C#中为其创建一个结构:

然后用Marshel转换它

MCvMat mat = (MCvMat)Marshal.PtrToStructure(pMat, typeof(MCvMat));
MCvMatData matdata = (MCvMatData)Marshal.PtrToStructure(mat.data, typeof(MCvMatData));
但这给了我一个例外。我需要做的是:

  • 在C#中创建数据结构以访问此指针或
  • 访问MCvMat.data属性的任何其他方法
    • 我已经出版了。它描述了这种结构的联合编组


      当我有更多时间时,我将尝试MarshalAs属性。通常,在这种情况下,我将在C++中实现一个适配器层,以便在非托管代码和托管代码之间更容易地传递数据。我尝试了各种可能的方法来创建结构,但都没有成功。如果你能提出什么建议,那将对我大有裨益。再次感谢您的回复。编写一个伪代码序列,然后我将帮助您在C#中实现它。我没有这些结构的伪代码,Dan,因为我使用库来访问它们。但我能找到密码。这是CvMat的结构。我需要访问那里的数据联盟。我现在拥有的是这个CvMat对象的指针(IntPtr)。我能够解组指向MCvMat(CvMat的C#版本)结构的指针。但在MCvMat结构中,指向数据属性的指针(IntPtr)也是一个指针。现在我需要解组指向对象的数据指针,这样我就可以访问其中的值。希望这些信息足够。非常感谢,非常感谢,丹:)能够用你的好例子来解决这个问题。。非常感谢…我也有同样的问题,你能帮我解决这个@Sach吗,我试过这个代码,我想知道你的代码是什么样子的
      MCvMat mat = (MCvMat)Marshal.PtrToStructure(pMat, typeof(MCvMat));
      MCvMatData matdata = (MCvMatData)Marshal.PtrToStructure(mat.data, typeof(MCvMatData));