使用 C++/CLI 捕获非托管类的返回类型
我的本机 dll 中有一个我想使用的方法。该方法返回一个类型的对象,该类型也在我的本机 dll 中。我正在尝试编写一个 C++/CLI 包装器。
现在,
- 我可以使用 C++/CLI 获取返回值作为对象吗?我该怎么做?
- 我们可以存储和传递本机 C++ 对象吗?
- 我是否需要创建自己的类似于本机 C++ 类的类?
- 我将如何编组班级?
例如,我的本机 dll 有这些类,
class X
{
/* some props and methods. */
};
Class Y
{
X* someMethod();
};
我需要使用 C++/CLI 包装 someMethod
类。我能在 CLI 中获取返回值吗?
I have a method in my native dll, that I want to use. The method returns an object of a type that is also in my native dll.I am trying to write a c++/CLI wrapper.
Now,
- Can I get a return value as the object using C++/CLI and how do I do that?
- Can we store and pass the native C++ object?
- Should I need to create my own class resembling the native C++ class?
- How would I marshal a class?
For Example,My native dll has these classes,
class X
{
/* some props and methods. */
};
Class Y
{
X* someMethod();
};
I need to wrap the someMethod
class using C++/CLI. Will I be able to get the return value in the CLI?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从 DLL 中的导出函数返回指向 C++ 对象的指针是一个非常糟糕的主意。这是一个令人讨厌的内存管理问题,您希望客户端代码释放该对象。只有当两个 DLL 使用 CRT DLL 版本的完全相同版本(/MD 编译选项)时,这才能得到良好的结果。如果你不能重新编译本机 DLL,那么现在就停止,你就不能让它可靠地工作,否则你将来会遇到很大的维护问题。
不管怎样,你需要一个两个类的包装器。它们应该类似于这样:
Returning pointers to C++ objects from an exported function in a DLL is a pretty bad idea. It is a nasty memory management problem, you'd expect the client code to release the object. That can only come to a good end when both DLLs use the exact same version of the DLL version of the CRT (/MD compile option). If you can't recompile the native DLL then stop right now, you cannot make it work reliably or you'll have a big maintenance problem in the future.
Anyhoo, you need a wrapper for both classes. They should resemble this: