C++与WPF混合编程

china_jeffery
博客专家认证
2014-11-09 05:43:25
目前要使用WPF来做界面部分,使用C++来做底层部分,但是不知道关于两者的交互有没有一个好的解决方案。
目前我所知道的解决方案有:
1. C++写成DLL供C#调用,这个参数类型转换,以及调用挺麻烦的,而且DLL导出类就更麻烦了。
2. Native C++转成托管C++,但是团队中对托管C++的了解太少,不想额外的增加开发难度。
3. 使用胶水语言来粘合,这种方法还不知道怎么做,也不知道效果怎么样。

目前我能想到的就是这3中方案,但是感觉都不怎么好。

希望群里面做过这方面的人能给个建议。
...全文
1650 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-04-02
  • 打赏
  • 举报
回复
如果以为文本文件的方法慢的话,参考下面: 无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
  • 打赏
  • 举报
回复
引用 11 楼 china_jeffery 的回复:
[quote=引用 8 楼 q339659207 的回复:] 现在我们是导出将C++类等,导出成C函数DLL,C#导入DLL来进行使用。
这个方式使用起来简单,但是麻烦,工程大了就要写很多很多导出函数了[/quote] 一般都是重新高度封装一些,使调用变得简单。
  • 打赏
  • 举报
回复
现在我们是导出将C++类等,导出成C函数DLL,C#导入DLL来进行使用。
Saleayas 2014-11-12
  • 打赏
  • 举报
回复
使用 C++ 的 WPF。
赵4老师 2014-11-12
  • 打赏
  • 举报
回复
用文本文件交换数据,通杀人-人,人-机,机-机之间的交互类问题。
china_jeffery 2014-11-12
  • 打赏
  • 举报
回复
引用 8 楼 q339659207 的回复:
现在我们是导出将C++类等,导出成C函数DLL,C#导入DLL来进行使用。
这个方式使用起来简单,但是麻烦,工程大了就要写很多很多导出函数了
china_jeffery 2014-11-12
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·……
用文本文件的方式,我也是醉了
mujiok2003 2014-11-12
  • 打赏
  • 举报
回复
healer_kx 2014-11-11
  • 打赏
  • 举报
回复
我觉得用P/Invoke比较简单。C++/CLI不可控。
超级能量泡泡 2014-11-11
  • 打赏
  • 举报
回复
引用 2 楼 u011573693 的回复:
我们曾经有个GIS的项目,在C++和WPF之间我们加了一层SDK层,其实就是对底层功能的一种高度封装和功能组合扩展了。 相信楼主已经能找到答案了,没有什么捷径的,除非你们底层开发组统一用托管C++,如果觉得封装很麻烦那就使用脚本技术来连接C# /C++~ 这也是目前比较常用的方法~
第三种方案,但是用类似lua的嵌入式脚本方案。而且也比较灵活,可以改造为其他方案,过度较为平滑。
赵4老师 2014-11-11
  • 打赏
  • 举报
回复 1
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·……
版主大哥 2014-11-10
  • 打赏
  • 举报
回复
做过的项目C++写网络库,WPF写界面
版主大哥 2014-11-10
  • 打赏
  • 举报
回复
用C++写底层,封装成dll给C#调用 类型转换,还好吧! 不要导出类啊,使用C的风格,传参,传函数指针....
1987andy 2014-11-10
  • 打赏
  • 举报
回复
我们曾经有个GIS的项目,在C++和WPF之间我们加了一层SDK层,其实就是对底层功能的一种高度封装和功能组合扩展了。 相信楼主已经能找到答案了,没有什么捷径的,除非你们底层开发组统一用托管C++,如果觉得封装很麻烦那就使用脚本技术来连接C# /C++~ 这也是目前比较常用的方法~
china_jeffery 2014-11-10
  • 打赏
  • 举报
回复
自己顶下
.NET Framework 是由 Microsoft 开发的一种全面且一致的编程模型,用于生成具有视觉震撼力的用户体验、无缝的安全通信和对一系列业务流程进行建模的能力的应用程序。 .NET Framework 4 将与旧的 Framework 版本并行工作。 默认情况下,基于早期版本的 Framework 的应用程序将继续在目标版本上运行。 Microsoft .NET Framework 4 提供了以下新功能和改进: 公共语言运行时 (CLR) 和基类库 (BCL) 的改进 性能改进,包括更好的多核心支持、后台垃圾回收和服务器上的探查器附加。 新的内存映射文件和数字类型。 更轻松的调试,包括转储调试、Watson 小型转储、64 位的混合模式调试和代码协定。 有关 CLR 和 BCL 的增强功能的完整列表,请转到此处。 Visual Basic 和 C# 语言中的创新,例如 lambda 语句、隐式行继续符、动态调度和命名/可选参数。 数据访问和建模的改进 利用 Entity Framework,开发人员可使用 .NET 对象和语言集成查询 (LINQ) 对关系数据库进行编程。 它具有多项新功能,包括持久性忽略和 POCO 支持、外键关联、延迟加载、测试驱动开发支持、模型中的函数和新的 LINQ 运算符。 其他功能包括:带自跟踪实体的更好的 n 层支持、使用 T4 模板的可自定义的代码生成、模型首次开发、改进的设计器体验、更好的性能以及实体集的复数形式。 有关更多信息,请转到此处。 WCF 数据服务是 .NET Framework 的一个组件,可以利用此服务创建基于 REST 的服务和应用程序,以便使用开放式数据协议 (OData) 在 Web 上公开和使用数据。 WCF 数据服务具有多项新功能,包括增强的 BLOB 支持、数据绑定、行计数、源自定义、投影和请求管道改进。 当前与 Microsoft Office 2010 的内置集成可将 Microsoft Office SharePoint Server 数据作为一个 OData 源公开,并使用 WCF 数据服务客户端库访问该数据源。 有关更多信息,请转到此处。 ASP.NET 的增强功能 对 HTML、元素 ID 和自定义 CSS 的更多控制,通过这些控制可更轻松地创建符合标准且 SEO 友好的 Web 窗体。 新的动态数据功能,包括新的查询筛选器、实体模板、对 Entity Framework 4 的更丰富的支持以及可轻松应用于现有 Web 窗体的验证和模板化功能。 针对新的 AJAX 库改进的 Web 窗体支持,包括对内容传递网络 (CDN) 的内置支持。 有关 ASP.NET 增强功能的完整列表,请转到此处。 Windows Presentation Foundation (WPF) 的改进 添加对 Windows 7 多点触控、功能区控件和任务栏扩展性功能的支持。 添加了对 Surface 2.0 SDK 的支持。 新的业务线控件,包括图表控件、智能编辑、数据网格以及其他用于改进生成以数据为中心的应用程序的开发人员体验的控件。 性能和伸缩性的改进。 文本清晰度、布局像素对齐、本地化和互操作性的可视化改进。 有关 WPF 的增强功能的完整列表,请转到此处。 Windows 工作流 (WF) 的改进,利用这些改进,开发人员能够更好地承载工作流并与其进行交互。 这些改进包括:改进的活动编程模型、改进的设计器体验、新的流程图建模样式、展开的活动面板、工作流规则集成和新的消息相关功能。 .NET Framework 4 还显著提高了基于 WF 的工作流的性能。 有关 WF 的增强功能的完整列表,请转到此处。 Windows Communication Foundation (WCF) 的改进,例如对 WCF 工作流服务的支持(可启用带消息传递活动的工作流程序)和相关支持。 此外,.NET Framework 4 还提供了新的 WCF 功能,如服务发现、路由服务、REST 支持、诊断和性能。 有关 WCF 的增强功能的完整列表,请转到此处。 创新的新并行编程功能,例如并行循环支持、任务并行库 (TPL)、并行 LINQ (PLINQ) 和协调数据结构(可让开发人员利用多核处理器)。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧