Hej!
Robię projekt, który rozwiązuje układ równań, dllka jest pisana w C++ a program głowny w C#, niestety korzystam w c++ z dynamicznie alokowanej dwuwymiarowej macierzy oraz z dynamicznie alokowanego wektora...i po stronie C# pojawia się błąd "System.Runtime.InteropServices.MarshalDirectiveException: 'Nie można zorganizować 'return value': Nieprawidłowa kombinacja typów zarządzanych/niezarządzanych."
Wzorując się na poście "https://4programmers.net/Forum/C_i_.NET/184160-wrapper_c++_to_cwywolanie_metody_zwracajacej_tablice_double_w_c" i zamieszczonych tam odpowiedziach myślałam, że program będzie działać, byłabym wdzięczna za sugestię co przegapiłam :)
Z góry wielkie dzięki!
Leks
Po stronie C#:
class Matrix
{
private double[,] data;
private int numberOfRows;
private int numberOfColumns;
//...dalsze metody/
}
class Vector
{
private double[] data;
private int numberOfRows;
//dalsze metody
}
public static class DllHelper
{
[DllImport(@"...\Elimination.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int[] chooseIdxOfFundamentalElement(int size, int step, double[,] matrixA);
/.......... dalsze funkcje
}
class MethodSolver
{
Matrix matrixA;
Vector vectorB;
Vector vectorX;
int[] changingColumnsInVectorX;
public MethodSolver(Matrix matrixA, Vector vectorB, Vector vectorX)
{
this.matrixA = matrixA;
this.vectorB = vectorB;
this.vectorX = vectorX;
changingColumnsInVectorX = new int[vectorB.NumberOfRows];
}
public void solveEquationsUsingElimination()
{
int[] idxOfFundamentalElem = new int[2];
for (int step = 0; step <= matrixA.NumberOfRows; step++)
{
idxOfFundamentalElem = DllHelper.chooseIdxOfFundamentalElement(matrixA.NumberOfRows, step, matrixA.Data);
//......dalsze metody
}
}
}
Po stronie C++:
extern "C" ELIMINATION_API int* chooseIdxOfFundamentalElement(int size, int step, double** matrixA);