Я столкнулся с проблемой, из-за которой выделение памяти для структуры с помощью 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
Инициализируются ли параметры структуры автоматически в C++ при использовании P/Invoke в C#? [дубликат] ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как автоматически генерировать интерфейс P/Invoke Jolt Physics (C++ lib) для Unity?
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-