创建一个新的“内部”流程?

时间:2015-07-08 20:26:46

标签: visual-c++ dll ipc

我正在编写一个DLL(在Visual C ++中),我最近决定我需要将当前在线程中发生的东西移动到他们自己的进程中。这是因为我想支持正在加载和运行的DLL的多个实例。但是,只要至少有一个DLL实例正在运行,它们都需要访问需要自动监视的同一组资源(i / o缓冲区到COM端口)。

似乎我需要使用CreateProcess(),但我不清楚应该如何使用lpApplicationName参数。在我看过的例子中,现有程序的名称被传递,但这不是我想象的我需要做的。我希望通过指定一个函数来启动一个进程,就像使用CreateThread()一样。该过程不需要编译并输出为自己的可执行文件,是吗?绝对不应该被我的DLL以外的任何东西使用。感谢。

编辑:好的,所以如果所有CreateProcess()都可以启动一个预先存在的程序,我怎么能让它工作?如果发生以下情况:

  1. 进程加载DLL
  2. DLL启动端口监控线程
  3. 第二个进程加载DLL
  4. 第二个DLL建立一些IPC以访问与第一个DLL相同的数据
  5. 第一个DLL即将退出,并终止监控线程
  6. 第二个DLL启动自己的监控线程并继续
  7. 做5和6似乎(特别是我的实现)就像一个笨重的做事方式,而不仅仅是我从来没有终止和重启的行为。

    编辑:我想的越多,我就越喜欢制作单独的可执行文件,但如果有人想到更“优雅”的方法,我仍然想知道。

1 个答案:

答案 0 :(得分:1)

你不能这样做。在* nix上你可以fork然后调用你想要的任何函数,但是CreateProcess不会那样工作。 CreateProcess唯一能做的就是从磁盘可执行文件的入口点开始执行新进程。