C++ 如何 可以导入C#制作的DLL吗?
我有一个用C#制作的DLL,这个DLL包含一些像Creator这样的类。
我需要加载此 DLL 并在 C++ 非托管中使用 Creator 类,
那么是否有某种方法可以创建该实例,或者我必须只加载公开的函数?
我需要这样的东西:
CreatorInstance->Init();
这可能吗?
I have a DLL made in C#, this DLL contains some clases like Creator.
I need to load this DLL and use Creator class in C++ unmanaged,
so Is there some way to create that instance or must I load just the functions exposed?
I need something like this:
CreatorInstance->Init();
Is this posible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您需要的大部分内容都可以在这里找到:http: //msdn.microsoft.com/en-us/library/x0w2664k%28VS.80%29.aspx
首先,您需要了解 C++ 编译的 /clr 开关。 然后您需要了解 Microsoft 添加的允许混合程序集的 C++ 扩展。 (指向托管类的 C++“指针”将使用 p^ 而不是 p*,依此类推。)
Most of what you need can be found here: http://msdn.microsoft.com/en-us/library/x0w2664k%28VS.80%29.aspx
Primarily, you need to learn about the /clr switch for C++ compilation. Then you need to understand the C++ extensions that Microsoft added to allow for mixed assemblies. (A C++ "pointer" to a managed class would use p^ instead of p*, and so on.)
John Fisher 使用 C++/CLI 的方法是迄今为止处理此问题最简单的方法,但它不是唯一的方法。
其他三个选项是:
1) 使用 COM 互操作通过 COM 包装 .NET 类
2) 您可以在本机非托管应用程序中托管 CLR,并调用它。 有关详细信息,请参阅本文。
3)您可以托管Mono运行时,并使用它来调用您的托管代码。 有关详细信息,请查看此页面。
选项 2 和 3 非常相似,但 IMO,3 比 2 更容易。
John Fisher's approach using C++/CLI is by far the easiest means of handling this, but it is not the only means.
The other three options are:
1) Use COM interop to wrap the .NET class via COM
2) You can host the CLR in your native, unmanaged application, and call into it. For details, see this article.
3) You can host the Mono runtime, and use it to call your managed code. For details on this, see this page.
Option 2 and 3 are very similar, but IMO, 3 is easier than 2.
这是一篇有趣的文章,介绍如何在不使用 /CLR 选项的情况下完成此操作
http://www.codeproject.com/KB/cs/ManagedCOM.aspx
效果很好。
Here is an interesting article on how you should be able to accomplish this without using the /CLR option
http://www.codeproject.com/KB/cs/ManagedCOM.aspx
Works pretty well.
首先,这是可能的,而且您“不必”使用 CLI 或 /clr 开关。 使用良好的旧 COM 架构,您可以轻松地做到这一点 http://msdn. microsoft.com/en-us/library/zsfww439.aspx。 理解 COM 的工作方式可能是这里最大的挑战,但是一旦您了解了它,它就会很有用。
First of all, it is possible and you do not "have" to use CLI or the /clr switch. Using the good old COM architecture you can do it pretty easily http://msdn.microsoft.com/en-us/library/zsfww439.aspx. Understanding the way COM works might be the biggest challenge here, but it's usefull once you know it.