Как эффективно передать структуру C#, содержащую массив структур, в функцию C++?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как эффективно передать структуру C#, содержащую массив структур, в функцию C++?

Сообщение Anonymous »

У меня есть структура 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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