我目前正在使用纯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?)中可重用的结构,并确保该值不会被销毁?
编辑(工作):
的帮助下,我终于成功了这是提升到C#的解决方案:
IntPtr ptr = IntPtr(instance_of_struct);
C#ClassHandler->PointerParameter = ptr;
这是从C#到c ++ struct的转换:
original_struct result = (original_struct)(void*)C#ClassHandler->PointerParameter;
我希望它可以帮助别人。
答案 0 :(得分:1)
您始终可以将地址存储在IntPtr
中。这是本机库的任务,以确保它不会破坏被指向的实例。本机代码中没有垃圾回收。
如果struct
不包含任何内容,除了指向它的无类型指针之外没有任何意义,因为在本机代码中没有任何函数可以获取除指针之外的任何内容。