C++ cli 非托管代码的包装器

C++ cli 非托管代码的包装器,c++-cli,wrapper,managed,C++ Cli,Wrapper,Managed,为了在托管代码中使用非托管代码,您将如何构建一个包装器,以及何时必须这样做?您通常不需要包装器,许多直接导出C函数的DLL都可以使用[DllImport]属性进行pinvok。C导出的一个例外是设计糟糕的DLL,它需要客户端代码释放内存,而托管代码无法这样做,因为它无法访问分配器 您必须拥有包装器的情况是本地C++类。托管代码不能直接pinvoke它,因为它不知道如何创建类的实例(这需要知道对象的大小并调用构造函数),也不知道如何销毁它(这需要调用析构函数)。在C++/CLI中很容易做到这一点。

为了在托管代码中使用非托管代码,您将如何构建一个包装器,以及何时必须这样做?

您通常不需要包装器,许多直接导出C函数的DLL都可以使用[DllImport]属性进行pinvok。C导出的一个例外是设计糟糕的DLL,它需要客户端代码释放内存,而托管代码无法这样做,因为它无法访问分配器


您必须拥有包装器的情况是本地C++类。托管代码不能直接pinvoke它,因为它不知道如何创建类的实例(这需要知道对象的大小并调用构造函数),也不知道如何销毁它(这需要调用析构函数)。在C++/CLI中很容易做到这一点。非常机械,SWIG项目可以自动完成。不过,学习该工具比学习如何编写包装更重要。

并不完全理解。你说C类可以被调用,但是C++不能?为什么?我在回答的第2段中特别提到了这一点。