Инициализируются ли параметры структуры автоматически в 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 МБ.

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