gpt4 book ai didi

delphi - 如何创建一个不终止的控制台应用程序?

转载 作者:行者123 更新时间:2023-12-03 15:44:05 25 4
gpt4 key购买 nike

在 C++ 中,控制台应用程序可以在其 WinMain 过程中包含消息处理程序,如下所示:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;

#ifdef _DEBUG
CreateConsole("Title");
#endif

hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(IsDialogMessage(hwnd, &msg))
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}

}

return 0;
}

这使得进程在控制台窗口收到 WM_QUIT 消息之前不会关闭。我不知道如何在 Delphi 中做类似的事情。

我需要的并不是一个消息处理程序,而是一个轻量级的“技巧”,使控制台应用程序像使用线程的 GUI 应用程序一样工作。例如,可以在控制台应用程序不终止进程的情况下处理两个 Indy TCP 服务器。

如何实现这一点?

最佳答案

我不确定我明白你需要做什么,但也许是这样的

program Project1;

{$APPTYPE CONSOLE}

uses
Forms,
Unit1 in 'Unit1.pas' {DataModule1: TDataModule};

begin
Application.Initialize;
Application.CreateForm(TDataModule1, DataModule1);
while not Application.Terminated do
Application.ProcessMessages;
end.

让你开始吗?它是一个控制台应用程序,当控制台关闭时它将终止。您可以在数据模块中使用 Indy 组件。

编辑:

没有 Forms 单元的替代方案是:

program Project1;

{$APPTYPE CONSOLE}

uses
Windows;

var
Msg: TMsg;
begin
while integer(GetMessage(Msg, 0, 0, 0)) <> 0 do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.

但是我认为这不适用于大多数 Delphi 组件 - 我不了解 Indy,但如果它的一个单元无论如何都引入了 Forms 单元,那么第一个版本是IMO 更可取。

关于delphi - 如何创建一个不终止的控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com