创建一个新的 "internal" 进程?
Creating a new "internal" process?
我正在编写一个 DLL(在 Visual C++ 中),我最近决定我需要将线程中当前发生的事情移动到它们自己的进程中。这是因为我要支持正在加载的 DLL 的多个实例和 运行。但是,它们都需要访问同一组资源(i/o 到 COM 端口的缓冲区),只要存在至少一个 DLL 运行.[= 实例,就需要对其进行自主监控。 11=]
看来我需要使用 CreateProcess(),但我不清楚应该如何使用 lpApplicationName 参数。在我看到的例子中,现有程序的名称被传递,但这不是我想我需要做的。我希望能够通过指定一个函数来启动一个进程,就像使用 CreateThread() 一样。该过程不需要编译并输出为它自己的可执行文件,不是吗?它绝对不应该被我的 DLL 以外的任何东西使用。谢谢
编辑:好的,如果 CreateProcess() 所能做的只是启动一个预先存在的程序,我该如何让它工作?如果发生以下情况:
- 进程加载 DLL
- DLL 启动端口监听线程
- 第二个进程加载 DLL
- 第二个 DLL 建立一些 IPC 来访问与第一个 DLL 相同的数据
- 第一个DLL即将退出,并终止监控线程
- 第二个 DLL 启动自己的监视线程并继续
做 5 和 6 似乎(尤其是在我的实现中)是一种笨拙的做事方式,而不仅仅是具有我永远不必终止和重新启动的行为。
编辑:我越想这个,就越喜欢制作一个单独的可执行文件的想法,但如果有人想到更多 "elegant" 方法,我仍然想知道。
你不能那样做。在 *nix 上你可以 fork
然后调用你想要的任何函数,但是 CreateProcess
不能那样工作。 CreateProcess
唯一能做的就是启动一个新进程,从 磁盘上可执行文件 .
的入口点开始执行
我正在编写一个 DLL(在 Visual C++ 中),我最近决定我需要将线程中当前发生的事情移动到它们自己的进程中。这是因为我要支持正在加载的 DLL 的多个实例和 运行。但是,它们都需要访问同一组资源(i/o 到 COM 端口的缓冲区),只要存在至少一个 DLL 运行.[= 实例,就需要对其进行自主监控。 11=]
看来我需要使用 CreateProcess(),但我不清楚应该如何使用 lpApplicationName 参数。在我看到的例子中,现有程序的名称被传递,但这不是我想我需要做的。我希望能够通过指定一个函数来启动一个进程,就像使用 CreateThread() 一样。该过程不需要编译并输出为它自己的可执行文件,不是吗?它绝对不应该被我的 DLL 以外的任何东西使用。谢谢
编辑:好的,如果 CreateProcess() 所能做的只是启动一个预先存在的程序,我该如何让它工作?如果发生以下情况:
- 进程加载 DLL
- DLL 启动端口监听线程
- 第二个进程加载 DLL
- 第二个 DLL 建立一些 IPC 来访问与第一个 DLL 相同的数据
- 第一个DLL即将退出,并终止监控线程
- 第二个 DLL 启动自己的监视线程并继续
做 5 和 6 似乎(尤其是在我的实现中)是一种笨拙的做事方式,而不仅仅是具有我永远不必终止和重新启动的行为。
编辑:我越想这个,就越喜欢制作一个单独的可执行文件的想法,但如果有人想到更多 "elegant" 方法,我仍然想知道。
你不能那样做。在 *nix 上你可以 fork
然后调用你想要的任何函数,但是 CreateProcess
不能那样工作。 CreateProcess
唯一能做的就是启动一个新进程,从 磁盘上可执行文件 .