挖井

类库大魔王的挖井日记

挖一口属于自己的井


实现命令行打开文件

  之前我说过,作为一个文本编辑器,一个IDE,不能通过命令行参数打开一个文件,是很说不过去的。前面试图加入这个功能,结果遇到了些问题,经过昨天和今天的奋战,终于搞定了。
  其实就是发现用wxWidgets的IPC机制怎么都不能正常运行,于是最后我想到了直接用Boost的InterProcess库,这个库也是跨平台可移植的,基本处于符合我的要求的范围内。
  昨天还一直没死心,希望能用wxWidgets的IPC类搞定,结果果然无论是用DDE还是用Socket,都有问题。今天下定决心,先看了一下Boost的资料,发现其实很简单,InterProcess只是实现了共享内存的部分,再加上一点同步相关的机制,用于通知,于是只要在最老的进程中启动一个线程无限循环等待其他进程的通知,有了通知就从共享内存中读取文件路径信息,然后就可以打开了。
  顺便说一下,Boost.InterProcess的共享内存类封装得比较底层,有一个类是纯粹的对系统的C API用C++类包装了一下。另一个稍微高级一点,但也是C++语言层面的高级,感觉缺少对现实世界对象的抽象。我有点奇怪自己现在怎么会考虑到这个层面的东西,大概是因为看了一段时间的Qt的文档和代码,Qt在这方面的工作确实做得很好啊。
  还有个之前说到的,在wxApp::OnInit方法中,创建完主窗口后,直接打开文件也崩溃的问题,其实是当时测试的时候没有把配置文件放在正确的配置目录中,这个功能其实是没多少问题的。
  总之,现在就是可以通过命令行参数指定文件打开一个文件了,然后又实现了单一进程实例,后面再要通过命令行参数打开文件,都会通过IPC机制通知最早创建的那个进程来打开文件。基本完美实现预定目标!

本文地址:

https://minidump.info/blog/2010/10/e5-ae-9e-e7-8e-b0-e5-91-bd-e4-bb-a4-e8-a1-8c-e6-89-93-e5-bc-80-e6-96-87-e4-bb-b6/

上一篇

一无所获,寸步难行

  作为一个文本编辑器,一个IDE,不能通过命令行参数打开一个文件,是很说不过去的,于是我就想加这个功能,不料却意外地困难!  首先考虑当前没有已经运行的本程序的进程,通过命令行参数指定一个文件后,最wxApp::OnInit的最后返回前,主窗口已经正常创建显示后,可以将文件路径传递给主窗口,...…

CodingStudio 全文阅读
下一篇

升级MinGW到GCC 4.5.0

  一直用GCC 4.4.0,之前也尝试过将sf.net上MinGW的各个包下载下来后解压覆盖到4.5.0,但最后编译我的工程时总是std::basic_string什么的一些libstdc++-6中的一些符号链接有问题,于是就搁置下来了。  今天偶然到了mamedev.org上看了看,发现它...…

CPPOOPGPXP 全文阅读