我有一个 C# 库,需要用作直接 C Win32 应用程序的一部分。我正在尝试在C++ / CLI中编写一个可以处理 C# .NET 对象的包装器。唯一的问题是整个项目不能用 C++ 编译,它必须留在 C 中。
为了解决这个问题,我想将我的 C# 对象的实例不透明地传递回 C 代码,以便它们可以传入并在包装库调用中使用,但我不知道该怎么做。例如,我想做这样的事情:
C++ / CLI 包装器:
void * ReturnObject(char *name){
return (void *)gcnew MyObject(gcnew String(name));
}
void UseObject (void *object){
MyObject ^handle = (MyObject ^)object;
object -> use();
}
使用 C++ 静态库的本机 C 代码:
int main (char **argv){
void *obj = ReturnObject("foobar");
UseObject(obj);
}
所以 C 代码从不关心内容obj
是什么,甚至不知道 CLR 类型MyObject
,它只是传递数据以保持对象持久性。我认为这应该用void
指针来完成,但是 C++ 编译器不想进行强制转换。我不知道这是否是因为托管内存和非托管内存之间的差异,或者我只是没有正确地做到这一点,但我当然会感谢任何帮助。
所以,回顾一下:我正在尝试在 C++/CLI 包装库中实例化 .net 对象,并将这些对象保存在直接 C 代码中,以便它们可以在我尚未编写的其他 C++/CLI 库调用中再次使用。
有什么建议么?