我想广播我的程序中一些环境变量的变化。因此其他一些实用程序可以使用新值。 当我在 Windows 7 平台上的 Delphy XE4 32 位中编译下一个例程时,一切似乎都工作正常。 当我将 Delphy 切换到 64 位平台时,调试器会产生访问冲突。
有什么建议吗?
<小时/>procedure BroadcastChange;
var
lParam, wParam : Integer;
Buf : Array[0..10] of Char;
aResult : PDWORD_PTR;
begin
Buf := 'Environment';
wParam := 0;
lParam := Integer(@Buf[0]);
SendMessageTimeout(HWND_BROADCAST,
WM_SETTINGCHANGE,
wParam,
lParam,
SMTO_NORMAL,
4000,
aResult );
end;
最佳答案
您需要以 null 终止字符串。只需将声明切换为使用 PChar
.
您还必须停止将指针强制转换为 32 位 Integer
这会将 64 位指针截断为 32 位指针,这很容易导致痛苦。
由于您不使用 aResult,因此传递 nil。您未初始化的指针显然是一个问题。
procedure BroadcastChange;
begin
SendMessageTimeout(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
LPARAM(PChar('Environment')),
SMTO_NORMAL,
4000,
nil
);
end;
关于delphi - Delphi XE4 64位中的SendMessageTimeout产生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958257/