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

时间:2018-02-27 14:58:10

标签: c# struct c++-cli

我目前正在使用纯C ++ Api(不是我的代码)和C#中的Gui之间的C ++桥接器。 我成功地使用IJW从C#调用本机API函数,但是我坚持使用不包含任何内容的结构。

我需要使用的结构。

struct original_struct;
typedef struct original_struct *original_struct_t;

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

初始化此结构的函数:

original_create(int login, original_struct * struct);

另一个功能的例子:

original_sendSomething(original_struct struct, original_settings * settings);

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

如何将此结构转换为C#(object,parameter,Intpr?)中可重用的结构,并确保该值不会被销毁?

编辑(工作):

nvoigt

的帮助下,我终于成功了

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

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

这是从C#到c ++ struct的转换:

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

我希望它可以帮助别人。

1 个答案:

答案 0 :(得分:1)

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

如果struct不包含任何内容,除了指向它的无类型指针之外没有任何意义,因为在本机代码中没有任何函数可以获取除指针之外的任何内容。