У меня есть код C ++, который содержит структуру, и мне нужно передать его в C #:
wrapper.h
#pragma once
typedef struct
{
int int1;
int int2;
} MY_STRUCT;
MY_STRUCT mystruct;
extern "C" __declspec(dllexport) int __stdcall GetTestStruct(MY_STRUCT* cs_struct);
wrapper.cpp:
int __stdcall GetTestStruct(MY_STRUCT* cs_struct)
{
mystruct.int1 = 23;
mystruct.int2 = 45;
cs_struct = &mystruct;
return 0;
}
wrapper.cs:
class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct MY_STRUCT
{
public int int1;
public int int2;
}
[DllImport(VpxMctlPath)]
public static extern int GetTestStruct(ref MY_STRUCT mystruct);
static void Main(string[] args)
{
var s = new MY_STRUCT();
GetTestStruct(ref s);
}
}
После запуска этого кода s по-прежнему имеет нули для int1 и int2.Я пытался сделать поля структуры C # частными и открытыми, но без разницы.Я посмотрел на C ++ / CLI, но это кажется излишним для этой небольшой задачи.Есть ли простой способ сделать это?