使用 C# 中的 C++ 类
Posted
技术标签:
【中文标题】使用 C# 中的 C++ 类【英文标题】:Use C++ class from C# 【发布时间】:2009-01-13 05:38:27 【问题描述】:好的,所以我有这个 C++ 图像捕获类。我想知道是否可以得到一些帮助..我知道基本的 C++(我已经完成了一个 c 介绍和一个 c++ 类的介绍),但我不知道该怎么做:
我需要使用这个类(即在我的解决方案中创建一个新的c++项目)并使用c#来引用它并使用它来保存屏幕截图。
当我尝试添加一个新项目时,我不知道该选择哪一个(win32、mfc、atl、clr、abc、xyz 等)。
图像捕捉类在这里: http://pastebin.com/m72414ab
我不知道我是否需要创建 .h 文件或者只是一个 .cpp 文件就可以了。老实说,我不知道从哪里开始大声笑。我正在寻找解决方案,但我想在这个过程中学习,所以我下次不必问(更不用说我喜欢c++,所以我会继续用它编码)
【问题讨论】:
我不明白为什么我被否决了。 因为这是我最舒服的地方,也是我用来构建当前应用程序的地方。但我想使用这个 c++ 类来提高速度和内存。谢谢 【参考方案1】:如果不了解有关 C++/CLI 的一些专业信息,您将无法轻松地从 C# 中使用 C++ 类 - 要么用 C 重写你的 C++ 类并使用 P/Invoke,要么找到一个完整的 C# 解决方案。
但我想使用这个 c++ 类来提高速度和内存。
我对此表示怀疑,除非您每秒捕获数千次图像,否则选择 C++ 没有任何好处,而且它会使您的程序更加复杂。坚持使用 C#,直到您知道您需要轻微的性能提升。
【讨论】:
【参考方案2】:.NET 2.0 及更高版本在 Graphics 对象上包含 CopyFromScreen 方法。您可以创建图像,为其获取绘图表面(图形),然后从屏幕复制到图像中。
快速搜索一下 Google 生成了一个 simple tutorial,它使用 Visual Basic .NET 演示了这一点,尽管移植到 C# 很简单。
此解决方案导致您的 C++ 版本使用相同的 GDI+ 调用,其好处是不必链接外部 C++ 代码(如上所述,这并不简单)。
【讨论】:
【参考方案3】:绝对可以使用 C# 中的 C++ 构造,但它确实需要一些肮脏的技巧。如果我没记错的话,上次我尝试这样做时,我在 C++ 和 C# 之间使用了托管 C++ 层,我认为这是最常见的方法。这种方法效果很好,但确实是不必要的复杂。
【讨论】:
以上是关于使用 C# 中的 C++ 类的主要内容,如果未能解决你的问题,请参考以下文章