Я пытаюсь экспортировать данные структуры C++ в C#.Как экспортировать данные C++ в структуру C#?
Скажем, у меня есть следующая структура, представляющая вектор 3-плавающей точки:
// C++
struct fvec3
{
public:
float x, y, z;
fvec3(float x, float y, float z) : x(x), y(y), z(z) { }
};
// C#
[StructLayout(LayoutKind.Sequential)]
struct fvec3
{
public float x, y, z;
public fvec3(float x, float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
Теперь, если я хотел бы использовать fvec3
из C# для C++, можно использовать следующие без проблем:
// C++
__declspec(dllexport) void Import(fvec3 vector)
{
std::cout << vector.x << " " << vector.y << " " << vector.z;
}
// C#
[DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Import(fvec3 vector);
...
Import(new fvec3(1, 2, 3)); // Prints "1 2 3".
Проблема теперь в том, чтобы сделать обратное: вернуть C++ fvec3
в C#. Как я могу это сделать? Я видел много реализаций C# использовать что-то вдоль линий этого:
// C#
[DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Export(out fvec3 vector);
...
fvec3 vector;
Export(out vector); // vector contains the value given by C++
Но как я пишу функцию C++ Export
?
Я попробовал все, что я мог бы подумать о том, как для подписи и тела:
// Signatures:
__declspec(dllexport) void Export(fvec3 vector)
__declspec(dllexport) void Export(fvec3* vector)
__declspec(dllexport) void Export(fvec3& vector)
// Bodies (with the pointer variants)
vector = fvec3(1, 2, 3);
memcpy(&fvec3(1, 2, 3), &vector, sizeof(fvec3));
*vector = new fvec(1, 2, 3);
Некоторые из них не имеют ДЕЙСТВИТЕЛЬНО, некоторые возвращаемые значения для мусора, а некоторые вызывают сбои.
В чем проблема? – wRAR
Как написать функцию C++ 'Export'? – Lazlo
У вас проблемы с подписью или с телом? Что вы уже пробовали? – wRAR