我正在处理包含用C++编写的DLL和C#代码的项目。让说该DLL具有的功能:处理C中结构的指针#
MyStruct* GetPointer(); // returns pointer to MyStruct structure
MYSTRUCT结构如下:
struct MyStruct
{
OtherStruct1 *data1;
OtherStruct2 *data2;
};
而且OtherStruct1和OtherStruct2结构是这样的:
struct OtherStruct1
{
public:
double x;
char y;
};
struct OtherStruct2
{
public:
float a;
float b;
float c;
float d;
};
我的问题是 - 什么是在C#代码中处理所有这些指针的最佳方法是什么?通过“处理”我的意思是阅读和写入记忆的操作。 C#中的结构不能简单地包含指针变量。我应该做些什么?什么是最优雅的方式?
是您希望在C#代码中修改的对象也更新查看相同指针的C++代码?如果你不得不在指针对象之前拨打['Marshal.StructureToPtr'](https://msdn.microsoft.com/en-us/library/dn261468(v = vs.110).aspx)得到更新? –
我期望有一种方法可以直接在内存中更改由DLL提供的对象的值,因此C++代码可以继续处理由C#代码更改的这些对象。这就像DLL提供了指针,C#正在用它们填充初始数据和DLL。然后C#代码继续读取由DLL修改的数据并在画布上绘制结果。 –
是否有可能使'GetPointer'成为C#方法,以便托管代码创建共享内存空间?和/或者你可以使用[C++/Cli](https://msdn.microsoft.com/en-us/library/68td296t.aspx)垫片来弥补差距吗? –