我能够通过装饰它成功地将引用类型对象从 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)