c -cli – 使用C/C++LI捕获非托管类的返回类型
发布时间:2020-12-16 06:57:12 所属栏目:百科 来源:网络整理
导读:我在我的原生dll中有一个方法,我想使用它.该方法返回一个类型的对象,该对象也在我的本机dll中.我正在尝试编写一个c / CLI包装器. 现在, 我可以使用C/C++LI获取返回值作为对象吗?我该怎么做? 我们可以存储和传递本机C对象吗? 我是否需要创建类似本机C类的
我在我的原生dll中有一个方法,我想使用它.该方法返回一个类型的对象,该对象也在我的本机dll中.我正在尝试编写一个c / CLI包装器.
现在, >我可以使用C/C++LI获取返回值作为对象吗?我该怎么做? 例如,我的本机dll有这些类, class X { /* some props and methods. */ }; Class Y { X* someMethod(); }; 我需要使用C/C++LI包装someMethod类.我能在CLI中获得返回值吗? 解决方法
从DLL中的导出函数返回指向C对象的指针是一个非常糟糕的主意.这是一个令人讨厌的内存管理问题,您希望客户端代码释放该对象.只有当两个DLL使用完全相同版本的CRT(/ MD编译选项)的DLL版本时,才能达到目的.如果您无法重新编译本机DLL,那么现在停止,您无法使其可靠地工作,或者您将来会遇到很大的维护问题.
Anyhoo,你需要两个类的包装器.他们应该像这样: #pragma managed(push,off) #include "xandy.h" #pragma managed(pop) using namespace System; namespace something { public ref class XWrapper { X* mX; public: XWrapper(X* obj) : mX(obj) {} ~XWrapper() { this->!XWrapper(); } !XWrapper() { // Trouble is here!!! delete mX; } }; public ref class YWrapper { Y* mY; public: YWrapper() { mY = new Y; } ~YWrapper() { this->!YWrapper(); } !YWrapper() { delete mY; } XWrapper^ someMethod() { return gcnew XWrapper(mY->someMethod()); } }; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |