Как вызвать функцию C ++ из .net, передавая 2D-массив? - PullRequest
2 голосов
/ 24 июня 2011

Я пытаюсь вызвать метод со следующим объявлением:

extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddTableDeal tableDeal, struct ddTableResults * tablep);

Структуры определены следующим образом:

    struct ddTableDeal {
  unsigned int cards[4][4];
};

struct ddTableResults {
  int resTable[5][4];
};

Я пытаюсь вызвать его таким образом:

  <DllImport("dds.dll", CallingConvention:=CallingConvention.StdCall)>
Public Shared Function CalcDDtable(ByVal deal As TableDeal, ByRef results As TableResults) As Integer
End Function

Public Function CalculateDeal() As Integer
    Dim tableDeal As TableDeal
    Dim tableResults As TableResults
    Dim cards(3, 3) As Integer
    cards(0, 0) = 32764
    cards(1, 1) = 32764
    cards(2, 2) = 32764
    cards(3, 3) = 32764
    tableDeal.Cards = cards

    Dim results(4, 3) As Integer
    tableResults=new TableResults
    tableResults.Results = results

    Dim errorCode = CalcDDtable(tableDeal, tableResults)

    Return errorCode
End Function

End Class

Public Structure TableDeal
    Dim Cards(,) As Integer
End Structure

Public Structure TableResults
    Dim Results(,) As Integer
End Structure

Структуры должны быть двумерными массивами с индексами 4,4 и 5,4 соответственно.Второй - это выходной параметр.

Куда я иду не так?

Для тех, кто хочет знать: это решатель с двойным манекеном .dll , написанный БоHaglund

1 Ответ

1 голос
/ 17 июля 2011

Ответ можно найти здесь

...