0

そのため、もともと 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 への約 2 回の呼び出しで、例外がスローされます。DLL のソースも取得しています。ここで例外がスローされます。

vertex *initPoints(double *x, double *y, double *z, 
                   double *u, double *v, double *w, int n)
{
    vertex* ps = new vertex[n];

もちろん、テスト C++ プロジェクトでコードを実行すると、問題なく実行されます。私の間違いは何ですか?

4

0 に答える 0