我想广播我的程序中一些环境变量的变化。因此其他一些实用程序可以使用新值。
当我在 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)