百科问答小站 logo
百科问答小站 font logo



把windows平台下mfc框架的代码移植到linux对编程小白来说难度很大吗?应该学习什么内容呢? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

哦,这是什么神仙解决方案……


user avatar   haozhi-yang-41 网友的相关建议: 
      

你还是继续投简历吧,反正你也刚入职。


user avatar   s.invalid 网友的相关建议: 
      

这个要看原软件是干什么的、具体有哪些功能了。


对小白来说嘛……那要看什么样的小白。要我刚毕业的水平那就和玩一样;但对绝大多数计算机专业毕业生,那几乎是难比登天。


如果想挑战一下的话,可以这样做:

1、先搞明白这是个什么软件、都有什么功能;写个文档,罗列出它所有的功能点。

2、根据罗列的所有功能点,找到对应的源码(比如点击某个按钮后执行统计,那么你就要把这段统计逻辑找出来);然后开个excel表,把相应的源码写到功能点后面。这些经常可以原样拷贝到其他平台(但某些API可能需要替换)。

3、找齐了所有的功能点和实现代码后,剖析它和界面是如何结合的(注意诸如各种小提示、变色等细小功能的实现),这些常常是不可移植的,需要在目标平台重写。

4、学习Qt或者GTK框架,完成移植。


早期的MFC几乎无封装,很多代码实现的很罗嗦;在新的QT/GTK框架下可以做的很简洁。

早期的网络通讯几乎都是赤裸裸的使用socket相关API,这套API在各大平台基本是通用的,至多命名风格略有不同。

因此,这个移植其实难度不大:熟悉Qt/GTK里面按钮事件的写法、知道怎么用tool tips,然后直接拷贝相应的事件处理函数源码即可——C/C++的可移植性还是挺不错的,看到错误提示找一找对应API在Linux下是哪个头文件声明的、接口和Windows有无微妙差别,然后改过去就是。

除了那些很细腻的tool tips或字体改变(加黑、斜体、变色)等提示信息,里面90%的代码都可以直接复制。


当然,如果你觉得他原本写的太烂的话,参考他的旧有实现自己重写也行。


user avatar   pansz 网友的相关建议: 
      

难不难什么的,其实还是与工作量相关的。

如果源代码一共也就一二十个文件,总代码量不足千行,那这个项目也就难不到哪儿去。一个正常思路的领导应该不会让新人移植过于复杂的项目。

至于C++要不要恶补?这个不需要吧,反正这个代码本身根本就是不能用的,你只是看代码然后当作需求自己重写而已。Linux这边完全可以不用C++写。你就说说你擅长什么吧,擅长啥就用啥。原MFC代码只要能看懂,不会写都没关系。

Linux这边,你想要用python,用java/kotlin,用go,用nodejs 什么的其实都行。只要你能看懂源代码,自己一行一行抄写过来实现即可。

至于你该学什么?首先取决于项目的代码量,如果代码量较大,建议你直接跑路。代码量较小,那可以试试。MFC的代码在其他环境都不能用,所以这代码只能看。自己看代码的逻辑,理解完了自己重写即可。

要搞清楚领导的意图,如果只是跑起来的话,用wine跑起来也是个办法。如果只是搞个小项目让你练手同时考核的话,这也算是不错的机会,毕竟完全重写代码这种事,很多程序员是欢迎的,比让你修改屎山代码舒服多了。


user avatar   bai-ru-bing-58 网友的相关建议: 
      

如果我做这项工作,先考虑在Windows平台下的改造,把GUI和逻辑拆离,逻辑模块保证只用标准C/C++。网络部分改造成用跨平台网络库如asio的。旧代码的逻辑模块中必然有一些日志系统等依赖Windows API的,这些都可以通过回调基类实现。

具体操作,你可以看下一些知名的代码库,逻辑部分和各个目标平台的sample是如何分工隔离的。

这些都做完后再考虑linux平台的移植问题。

但是我还是建议你跑路。




  

相关话题

  “C++”读作「C 加加」,为什么“C#”不能读作「C 井」呢? 
  有人号称编程零基础学C#4天,用记事本1分钟写个计算器,而且信誓旦旦,这是怎么回事? 
  为什么全球大部分程序员都在使用英文编程,英文编程究竟好在哪? 
  socket套接字在多线程发送数据时要加锁吗? 
  为什么编程语言中没有一种 if,来判断大概率为真(或假)的情况,来提升 CPU 分支预测的速度呢? 
  c++循环里面定义重名为什么不报错? 
  为什么碰到几个做嵌入式开发的人都说做MCU开发没什么意思,要做基于Linux系统的嵌入式开发? 
  为什么要学习别人的设计模式? 
  如何理解 C++ 中这两个结构体的大小(size)? 
  为什么说C++的main函数最后不写 return 0; 是不好的习惯? 

前一个讨论
如果人体的安全电压不再是 36V 而是 0V,会有什么后果,会怎样影响世界?
下一个讨论
我们所认知的宇宙有没有可能本身就是一个黑洞?





© 2024-11-23 - tinynew.org. All Rights Reserved.
© 2024-11-23 - tinynew.org. 保留所有权利