Я вызываю функции из C ++, которые возвращают указатель на массив struct, и у меня возникают проблемы, так как я новичок в этой операции / реализации.
Мои коды C ++:
// My C++ Structs
typedef struct _MainData {
double dCount;
DataS1 *DS1;
int iCount1;
DataS2 *DS2;
int iCount2;
}MainData;
typedef struct _DataS1 {
unsigned int uiCount1;
unsigned int uiCount2;
int iCount;
void *pA;
void *pB;
} DataS1;
typedef struct _DataS2 {
unsigned int uiCount1;
unsigned int uiCount2;
unsigned int uiCount3;
unsigned int uiCount4;
double dCount;
int iCount1;
char strLbl[64];
} DataS2;
// My C++ Function
MainData* GetData(const int ID)
{
MainData* mData;
int iLength = Get_Count();
mData = new MainData[iLength];
for(int x = 0;x < VarCounter; x++)
{
// Codes here assign data to mData[x]
}
return mData;
}
Вопрос:
Как я могу вызвать функцию C ++ GetData для C #?
Мои текущие коды в C #:
[DllImport(".\\sdata.dll")]
[return: MarshalAs(UnmanagedType.LPArray)]
private static unsafe extern MainData[] GetData(int ID);
// The struct MainData in my C# side is already "Marshalled"...
//My function call is here:
MainData[] SmpMapData = GetData(ID);
Когда я скомпилировал это, есть исключение:
«Невозможно выполнить маршализацию« возвращаемого значения »: недопустимая комбинация управляемого / неуправляемого типа.»
Извините за плохое кодирование ... Пожалуйста, помогите ...