У меня есть структура C#, которая содержит массив другой структуры. Я хочу передать эту структуру в функцию C++ для изменения и получить обновленные данные с минимальными затратами на копирование. Как лучше всего это сделать?
Использование Marshal.PtrToStructure приводит к созданию копии, не так ли?
C#< /strong>
{
IntPtr ptr = Marshal.AllocHGlobal( Marshal.SizeOf( typeof( OuterStruct ) ) );
try
{
ProcessStruct( ptr );
OuterStruct result = Marshal.PtrToStructure( ptr ); // Copy...
}
finally
{
Marshal.FreeHGlobal( ptr );
}
}
C#
[StructLayout(LayoutKind.Sequential)]
struct InnerStruct
{
public int Value1 = 0;
public float Value2 = 0;
public String Message = null;
}
[StructLayout(LayoutKind.Sequential)]
struct OuterStruct
{
public int Count;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
public InnerStruct[] InnerArray;
}
C++
struct InnerStruct
{
int Value1;
float Value2;
const wchar_t* Message;
};
struct OuterStruct
{
int Count;
InnerStruct InnerArray[10000];
};
extern "C" __declspec(dllexport) void ProcessStruct(OuterStruct* outerStruct)
{
for (int i = 0; i < 10000; ++i)
{
auto& inner = outerStruct->InnerArray;
inner.Value1 = i; // Set
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... cts-to-a-c
Как эффективно передать структуру C#, содержащую массив структур, в функцию C++? ⇐ C#
Место общения программистов C#
1733317248
Anonymous
У меня есть структура C#, которая содержит массив другой структуры. Я хочу передать эту структуру в функцию C++ для изменения и получить обновленные данные с минимальными затратами на копирование. Как лучше всего это сделать?
Использование Marshal.PtrToStructure приводит к созданию копии, не так ли?
[b]C#< /strong>
{
IntPtr ptr = Marshal.AllocHGlobal( Marshal.SizeOf( typeof( OuterStruct ) ) );
try
{
ProcessStruct( ptr );
OuterStruct result = Marshal.PtrToStructure( ptr ); // Copy...
}
finally
{
Marshal.FreeHGlobal( ptr );
}
}
C#[/b]
[StructLayout(LayoutKind.Sequential)]
struct InnerStruct
{
public int Value1 = 0;
public float Value2 = 0;
public String Message = null;
}
[StructLayout(LayoutKind.Sequential)]
struct OuterStruct
{
public int Count;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
public InnerStruct[] InnerArray;
}
[b]C++[/b]
struct InnerStruct
{
int Value1;
float Value2;
const wchar_t* Message;
};
struct OuterStruct
{
int Count;
InnerStruct InnerArray[10000];
};
extern "C" __declspec(dllexport) void ProcessStruct(OuterStruct* outerStruct)
{
for (int i = 0; i < 10000; ++i)
{
auto& inner = outerStruct->InnerArray[i];
inner.Value1 = i; // Set
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79250807/how-to-efficiently-pass-a-c-sharp-struct-containing-an-array-of-structs-to-a-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия