C++与WPF混合编程

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

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

希望群里面做过这方面的人能给个建议。
...全文
1925 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
  • 打赏
  • 举报
回复
自己顶下

65,170

社区成员

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

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