Инициализируются ли параметры структуры автоматически в C++ при использовании P/Invoke в C#? [дубликат]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Инициализируются ли параметры структуры автоматически в C++ при использовании P/Invoke в C#? [дубликат]

Сообщение Anonymous »

Я столкнулся с проблемой, из-за которой выделение памяти для структуры с помощью new в функции C++ не приводит к корректной передаче экземпляра обратно в C#.
Похоже, что правильный подход — избегать использования new в функции C++ и напрямую задавать значения параметра out. Однако мне не удалось найти документацию, которая бы явно описывала это поведение или объясняла, как выходные параметры автоматически обрабатывают создание экземпляра.
Есть ли у вас эта информация где-нибудь в Microsoft Document?
Я хотел бы знать, знаете ли вы о это.
C++
struct MyStruct {
int value1;
float value2;
};

extern "C" __declspec(dllexport) void GetValues(MyStruct* outStruct) {
// outStruct = new MyStruct(); // NG
outStruct->value1 = 42;
outStruct->value2 = 3.14f;
}

C#
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct {
public int value1;
public float value2;
}

[DllImport("MyNativeLib.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void GetValues(out MyStruct result);

public static void TestInterop() {
MyStruct result;
GetValues(out result);
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... p-invoke-i
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Объявления Unity не инициализируются автоматически?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как автоматически генерировать интерфейс P/Invoke Jolt Physics (C++ lib) для Unity?
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Почему мои переменные Flutter не инициализируются при запуске
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему мои переменные Flutter не инициализируются при запуске
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как маршалировать структуру с помощью вложенного массива структур при использовании P/Invoke C#
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

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