У меня есть структура 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#, содержащую массив структур, в функцию C++?
Anonymous » » в форуме C# - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-