c++/clr IJW 空结构作为参数函数

c++/clr IJW empty struct as an parameter function

我目前正在纯 C++ Api(不是我的代码)和我的 C# 中的 Gui 之间的 C++ 桥上工作。 我成功地使用 IJW 从 C# 调用本机 API 函数,但我被一个不包含任何内容的结构卡住了。

我需要使用的结构。

struct original_struct;
typedef struct original_struct *original_struct_t;

我必须使用指向该结构的指针来调用函数。 此函数将初始化它并设置一个值。 然后我可以在另一个函数中使用这个结构指针。

初始化这个结构的函数:

original_create(int login, original_struct * struct);

另一个函数的例子:

original_sendSomething(original_struct struct, original_settings * settings);

我在某处看到 C++ 空结构可以在 C# 中转换为 sByte 或 Byte,但我不确定如何转换它。

如何将此结构转换为可在 C# 中重用的内容(对象、参数、Intpr?),并确保该值不会被破坏?

编辑(工作):

nvoigt

的帮助下终于成功了

这里是提升到C#的解决方案:

IntPtr ptr = IntPtr(instance_of_struct);
C#ClassHandler->PointerParameter = ptr;

这是从 C# 到 C++ 结构的转换:

original_struct result = (original_struct)(void*)C#ClassHandler->PointerParameter;

希望对其他人有所帮助。

您始终可以将地址存储在 IntPtr 中。本机库的任务是确保它不会破坏所指向的实例。本机代码中没有垃圾回收。

如果 struct 不包含任何内容,那么除了一个指向它的无类型指针之外没有任何意义,因为在本机代码中拥有一个接受除了指针之外的任何东西的函数是没有意义的。