所以我试图让一些代码在我最初用 C++ 编写的 .net 项目中工作。我认为最简单的方法是将其简单地包装在一个 DLL 中并使用 pinvoke 使其工作。
这看起来很简单,但每次都会在 C++ 代码的同一行抛出一个堆损坏异常。
public class NN_Wrapper
{
[DllImport("MyNative.dll", CharSet= CharSet.Ansi)]
private static extern unsafe int DoWork(DataPoint[] fixedVals, int fixedValsLength, [In, Out]DataPoint[] workVals, int workValsLength);
public void DoWork(DataPoint[] fixedVals, DataPoint[] workVals)
{
DoWork(fixedVals, fixedVals.Length, workVals, workVals.Length);
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DataPoint
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public double[] inputVals;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public double[] outputVals;
}
但是关于 DLL 的两次调用,它会抛出一个异常,我也有 DLL 的源代码,这就是它抛出异常的地方。
vertex *initPoints(double *x, double *y, double *z,
double *u, double *v, double *w, int n)
{
vertex* ps = new vertex[n];
当然,当我在测试 C++ 项目中运行代码时,它可以毫无问题地执行,我的错误是什么?