当以64位编译程序时,WinAPI函数AttachConsole
总是返回true。
首先,我声明了以下函数:
function AttachConsole(dwProcessId: DWORD): Bool; stdcall; external KERNEL32 name 'AttachConsole';
然后我调用我的函数:
if AttachConsole(DWORD(-1)) then
....
这段代码在32位应用程序编译时运行良好,但在64位编译时总是返回true。 文档没有提到需要为64位应用程序做特殊处理。
如何重现:
1.创建一个新的VCL应用程序
2.将目标平台设置为Win64
3.将DPR文件编辑为以下内容:
program Project1;
uses
System.Types,
WinApi.windows,
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
function AttachConsole(dwProcessId: DWORD): Bool; stdcall; external KERNEL32 name 'AttachConsole';
begin
if AttachConsole(DWORD(-1)) then
begin
writeLN('Hello world');
Exit;
end;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
在Win64下运行时,即使从资源管理器中运行,
AttachConsole
也会返回true。
DWORD(-1)
有一些奇怪的处理方式 - 你尝试过使用$FFFFFFFF
吗? - 500 - Internal Server Error