Маршалирование массива структурыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Маршалирование массива структуры

Сообщение Anonymous »

Я работаю с неуправляемым C ++ DLL в C#, который управляет устройством MeasureMnet над USB. Я дошел до того, чтобы получить измерение единого значения, но я изо всех сил пытаюсь восстановить записанные данные ... Я думаю, я просто не могу найти путь к маршалу должным образом массив структурного тумана. < /P>
int OutNo = 1; //Measurement head #1 selected
int NumOfBuffer = 10; //Number of datapoints recorded
LKIF_FLOATVALUE[] OutBuffer = new LKIF_FLOATVALUE[10]; //data buffer
int NumReceived = 0; //number of valid points

RC ReturnCode = LKIF2_DataStorageGetData(OutNo, NumOfBuffer, out OutBuffer, ref NumRecieved); //returns a Null pointer for OutBuffer and an error return code "Response receiving error"

[DllImport("LkIF2.dll")]
public static extern RC LKIF2_DataStorageGetData(int OutNo, int NumOfBuffer, out LKIF_FLOATVALUE[] OutBuffer, ref int NumReceived);

public struct LKIF_FLOATVALUE
{
public LKIF_FLOATRESULT FloatResult;
public float Value;
}
public enum LKIF_FLOATRESULT
{
LKIF_FLOATRESULT_VALID, // valid data
LKIF_FLOATRESULT_ALARM, // alarm
LKIF_FLOATRESULT_INVALID, // Invalid (error, etc.)
}
< /code>
И вот раздел файла заголовка с прототипом функции: < /p>
// Outputting the Data Storage
EXP RC WINAPI LKIF2_DataStorageGetData(IN int OutNo,IN int NumOfBuffer,OUT LKIF_FLOATVALUE * OutBuffer,OUT int *NumReceived);
< /code>
Я попытался играть с различными вариантами маршал для структуры, но, по сути, не повезло. На этом этапе я был бы счастлив, даже если буфер не мог быть динамически распределен. Я боюсь, что у меня есть потеря для решения. Проблема заключается в том, чтобы использовать массив LKIF_FLOATVALUE [].// Measurement value structures
typedef enum {
LKIF_FLOATRESULT_VALID, // valid data
LKIF_FLOATRESULT_INVALID, // Invalid (error, etc.)
} LKIF_FLOATRESULT;
// Measurement value
typedef struct {
int OutNo; // OUT No(0-11)
LKIF_FLOATRESULT FloatResult; // valid or invalid data
float Value; // Measurement value
} LKIF_FLOATVALUE_OUT;
typedef struct {
LKIF_FLOATRESULT FloatResult; // valid or invalid data
float Value; // Measurement value
} LKIF_FLOATVALUE;

// Measured value output (single)
EXP RC WINAPI LKIF2_GetCalcDataSingle(IN int OutNo,OUT LKIF_FLOATVALUE_OUT * CalcData);
// Outputting the Data Storage
EXP RC WINAPI LKIF2_DataStorageGetData(IN int OutNo,IN int NumOfBuffer,OUT LKIF_FLOATVALUE * OutBuffer,OUT int *NumReceived);


Подробнее здесь: https://stackoverflow.com/questions/795 ... -of-struct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»