Я работаю с неуправляемым 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
Маршалирование массива структуры ⇐ C++
Программы на C++. Форум разработчиков
1744657511
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);
Подробнее здесь: [url]https://stackoverflow.com/questions/79573560/marshaling-an-array-of-struct[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия