小编Kha*_*led的帖子

将引用类型对象数组从 C# 编组到 C++

我能够通过装饰它成功地将引用类型对象从 C# 传递到 C++StructLayout(LayoutKind.Sequential)

C# 中的类:

StructLayout(LayoutKind.Sequential)
public class Point
{
        [DataMember]
        public double X { get; set; }
        [DataMember]
        public double Y { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

C++ 中的等价物:

struct Point
{
public:
    double x;
    double y;
};
Run Code Online (Sandbox Code Playgroud)

C++中的函数体:

extern "C" __declspec(dllexport) void Translate(Point* pt, double dx, double dy)
{
    pt->x += dx;
    pt->y += dy;
}
Run Code Online (Sandbox Code Playgroud)

以及 C# 中的等效项:

[DllImport("myDll.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void Translate(Point pt, double dx, double dy); 
Run Code Online (Sandbox Code Playgroud)

到目前为止我没有遇到任何问题,当我在接下来的两个函数之间传递这些点的数组时,问题就会发生:

extern "C" __declspec(dllexport) …
Run Code Online (Sandbox Code Playgroud)

c# c++ arrays pinvoke marshalling

-1
推荐指数
1
解决办法
2866
查看次数

标签 统计

arrays ×1

c# ×1

c++ ×1

marshalling ×1

pinvoke ×1