C# 用于 UI,c++ 用于库

     2023-02-16     163

关键词:

【中文标题】C# 用于 UI,c++ 用于库【英文标题】:C# for UI, c++ for library 【发布时间】:2009-11-13 18:18:01 【问题描述】:

我有一个用 C++ 编码的数值库。

我将为图书馆制作一个 UI。我知道一些MFC。因此,一种解决方案是使用 MFC 并制作原生应用程序。

替代方案是 C#。我对C#一无所知。但我认为它应该很容易学习。

一些 C++ 和 C# 混合编程的教程对我很有帮助。

谢谢!

【问题讨论】:

【参考方案1】:

我建议通过 C# 为您的 GUI 使用 Windows 窗体或 WPF。

获取您的数值库,并使用 C++/CLI 为其创建一个 .NET 包装器。这使得从 C# 中使用变得微不足道(它看起来像任何其他 C# 库)。

我强烈推荐 CodeProject 上的 Nishant Sivakumar's C++/CLI articles 来学习 C++/CLI 以及如何包装 C++ 库。他们写得相当好。

MSDN 是如何使用Windows Forms from C# 的一个很好的参考。

【讨论】:

【参考方案2】:

使用WinForms or WPF 用C# 编写您的GUI,并通过Platform Invoke 调用您的本机代码。

您可能想要考虑使用 C++/CLI 为您的本地库创建一个 .NET 包装器,而不是 P/Invoke。

恕我直言,使用 C# 比 MFC 容易得多,因此您走在正确的轨道上。

【讨论】:

P/Invoke 如果它是一个真正的 C++ 库,那么它是很困难的。您几乎必须为您的库提供一个 C API 才能使用它。 C++/CLI 更具表现力。 当然取决于他的 C++ 库的接口。如果它简单而简短,P/Invoke 就可以了。【参考方案3】:

您可以非常轻松地使用 C# 来制作 UI。您需要编写一个简单的包装类来调用您的非托管 dll,但这很简单。查看有关该主题的msdn page

【讨论】:

【参考方案4】:

使用 C#。 MFC 有点过时了,所以如果您需要学习一些东西 - 使用更新的技术,请不要在 MFC 上浪费您的时间。 我会选择 WPF,学习曲线相当陡峭,但它很有趣。

【讨论】:

【参考方案5】:

我建议调查SWIG。您可以在 C++ 中将代码的核心部分编写为 dll,然后有一个针对它的 C# UI 链接。

【讨论】:

【参考方案6】:

如果您有 C++ 数值库的源代码,您可以修改它以编译为 C++/CLI,然后您可以像任何其他 .NET 库一样链接到它。使用#defines for C++/CLI 条件编译修改源代码不需要大量工作。

【讨论】:

从 c# 调用 c++ 库

...楚。我有一个使用moticsIDE创建的c++库。我必须能够将此库用于c#项目。有人在交给我之前一直在做这个项目。目前,有2层可以实现这一点。首先,一个c++项目包括带有c++包装器的完整库。该项目创建一个dll作为输出。然后 查看详情

将 C++ 结构转换为 C# 以用于 UDP 通信

】将C++结构转换为C#以用于UDP通信【英文标题】:ConvertingC++structtoC#forusewithUDPcommunication【发布时间】:2015-11-1713:06:15【问题描述】:我正在编写一个通过UDP与C++程序通信的程序。另一个程序已经写好了(不是我写的)。我得到了... 查看详情

编写用于 C# 的非托管 C++ DLL

】编写用于C#的非托管C++DLL【英文标题】:WritingunmanagedC++DLLsforuseinC#【发布时间】:2012-04-2810:10:47【问题描述】:我是一名LinuxC++开发人员,我需要为windows编写C++dll,用于C#应用程序。问题是将DLL导入C#,我不知道该怎么做。在我... 查看详情

用于操作图像的 C++ 库

】用于操作图像的C++库【英文标题】:C++librariestomanipulateimages【发布时间】:2010-09-0716:27:23【问题描述】:您是否知道任何开源/免费软件C++库来处理这些格式的图像:.jpg.gif.png.bmp?它支持的格式越多越好。我正在用C++实现一个免... 查看详情

用于定时操作的 C# 库

】用于定时操作的C#库【英文标题】:C#Librariesfortimedactions【发布时间】:2011-05-2410:01:00【问题描述】:您知道任何允许您对一系列操作进行排序的C#库吗?每个动作在前一个动作完成时执行,或者更好的是,在特定时间间隔发生... 查看详情

用于计算连续信号的 C++ 模板库

】用于计算连续信号的C++模板库【英文标题】:C++templatelibraryforcalculatecontinuoussignals【发布时间】:2011-02-2421:17:40【问题描述】:我正在寻找一个C++模板库,它实现对以整数类型表示的连续信号及其分辨率(定点数)的操作。例... 查看详情

进程间通信 C# <--> 用于游戏调试引擎的 C++

】进程间通信C#<-->用于游戏调试引擎的C++【英文标题】:InterprocesscommunicationC#<-->C++forgamedebuggingengine【发布时间】:2010-04-0823:50:04【问题描述】:我正在开发游戏脚本引擎的调试器项目。我希望用C#编写调试器的GUI。然... 查看详情

用于数据库差异的 C# 库

】用于数据库差异的C#库【英文标题】:C#libraryfordatabasediff(ing)【发布时间】:2011-08-3013:51:27【问题描述】:在整理用于增量数据库更新的迁移脚本时,我发现现成的数据库差异工具(我研究过的)都不会生成我们开发过程所需... 查看详情

免费库,例如用于 C++ 的 Java 机器人类

】免费库,例如用于C++的Java机器人类【英文标题】:FreelibrarylikeJava\'sRobotclassforC++【发布时间】:2009-10-1317:58:14【问题描述】:是否有与Java的C++机器人类具有相同功能的免费库?http://java.sun.com/javase/6/docs/api/java/awt/Robot.html【问... 查看详情

用于 C++ 的非 GPL JSON-RPC 库 [关闭]

】用于C++的非GPLJSON-RPC库[关闭]【英文标题】:Non-GPLJSON-RPClibraryforC++[closed]【发布时间】:2008-10-3122:53:44【问题描述】:哪些非GPL库可用于用原生C++编写JSON-RPC服务器和客户端?根据http://json-rpc.org/wiki/implementations,似乎只存在一... 查看详情

从 C++ 回调到 C#

...发布时间】:2011-06-2814:03:51【问题描述】:假设我有一个用于计算PI的C++库函数://pi.h:#ifdefBUILDING_DLL#defineDLL_MACRO__declspec(dllexport)#else#defineDLL_MACRO__declspec(dllimport)#endifnamespaceCppclass 查看详情

用于图像识别的 C++ 库:包含单词到字符串的图像

】用于图像识别的C++库:包含单词到字符串的图像【英文标题】:C++Libraryforimagerecognition:imagescontainingwordstostring【发布时间】:2010-10-0213:09:54【问题描述】:是否有人知道用于拍摄图像并对其执行图像识别的c++库,以便它可以根... 查看详情

用于比较两个音频文件的 openAL c++ 库 [关闭]

】用于比较两个音频文件的openALc++库[关闭]【英文标题】:openALc++LibrarytocomparetwoAudiofiles[closed]【发布时间】:2016-06-1016:26:31【问题描述】:我必须从事一个小项目。我只是在为此做准备。它与音频信号有关。我听说openAL是一个c++... 查看详情

C++ 可用于 Android 和 iOS 上的 UI 开发

】C++可用于Android和iOS上的UI开发【英文标题】:C++possibleforUIdevelopmentonAndroidandiOS【发布时间】:2021-12-2013:24:00【问题描述】:我想知道是否可以用C++编写移动应用程序。在互联网上,我发现了一篇关于用Kotlin或FLutter/Dart编写应用... 查看详情

任何可用于在浮点表示之间转换的 C++ 库?

】任何可用于在浮点表示之间转换的C++库?【英文标题】:AnyC++librariesavailabletoconvertbetweenfloatingpointrepresentations?【发布时间】:2008-10-1200:49:02【问题描述】:我最近需要解释DEC32位浮点表示。它与IEEE浮点表示法的不同之处在于分... 查看详情

从 C++ 向后调用 C#

...题描述】:我正在使用C#中的C++库,该库还没有完全开发用于从其他语言中使用,但现在很难更改某些内容。我正在使用[DllImport]调用,几乎一切正常。但知道我需要使用从C++到C#的“反向”调用。所以,在C#中,我需要订阅C++函... 查看详情

在 Windows 上管理用于 C++ 开发的库集合

】在Windows上管理用于C++开发的库集合【英文标题】:ManagingacollectionoflibrariesforC++developmentonWindows【发布时间】:2014-01-0514:58:19【问题描述】:我负责开发一组C++库和程序。目前在Linux和MacOS上构建,但也需要Windows支持。我们将需... 查看详情

用于多跨平台使用的音频库 C++(iphone、android...)

】用于多跨平台使用的音频库C++(iphone、android...)【英文标题】:AudioLibraryC++foramulticrossplatformuse(iphone,android...)【发布时间】:2011-09-1606:02:43【问题描述】:我正在尝试制作一个可以读取mp3文件的C++引擎,并根据读取声音文件的... 查看详情