相关疑难解决方法(0)

将Marshal C++ struct数组转换为C#

我在C++中有以下结构:

#define MAXCHARS 15

typedef struct 
{
    char data[MAXCHARS];
    int prob[MAXCHARS];
} LPRData;
Run Code Online (Sandbox Code Playgroud)

我正在调用一个函数来获取这些结构中的3个数组:

void GetData(LPRData *data);
Run Code Online (Sandbox Code Playgroud)

在C++中我会做这样的事情:

LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData( Results );
Run Code Online (Sandbox Code Playgroud)

它会工作得很好,但在C#我似乎无法让它工作.我已经像这样创建了一个C#结构:

public struct LPRData
{

    /// char[15]
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
    public string data;

    /// int[15]
    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
    public int[] prob;
}
Run Code Online (Sandbox Code Playgroud)

如果我初始化其中3个(及其所有子数组)的数组并将其传递给此:

GetData(LPRData[] data);
Run Code Online (Sandbox Code Playgroud)

它成功返回,但LPRData数组中的数据没有更改.

我甚至尝试创建一个大小为3 LPRData的原始字节数组,并将其传递给函数原型,如下所示:

GetData(byte [] data);

但在这种情况下,我将从第一个LPRData结构中获取"数据"字符串,但在此之后没有任何内容,包括来自同一LPRData的"prob"数组.

有关如何妥善处理此问题的任何想法?

c# c++ interop struct marshalling

28
推荐指数
2
解决办法
7万
查看次数

如何编组指向int的指针?

Umanaged C++:

int  foo(int **    New_Message_Pointer);
Run Code Online (Sandbox Code Playgroud)

我如何将其编组到C#?

[DllImport("example.dll")]
static extern int foo( ???);
Run Code Online (Sandbox Code Playgroud)

c# c++ marshalling

5
推荐指数
1
解决办法
997
查看次数

标签 统计

c# ×2

c++ ×2

marshalling ×2

interop ×1

struct ×1