微軟在win10下明文廢掉了GetVersionEx,不得已改用VerifyVersionInfo這個蛋疼的函數進行比對了,
但是寫了代碼無論怎樣都編譯不過,哪位大神可以幫我修改下或者指出哪裡有問題,謝謝!
var
VsInfo: TOSVersionInfoEx;
bl:boolean;
dwlConditionMask: DWORDLONG;
begin
FillChar(VsInfo,SizeOf(TOSVersionInfoEx),0);
VsInfo.dwOSVersionInfoSize :=SizeOf(TOSVersionInfoEx);
VSInfo.dwMajorVersion:=10;
VSInfo.dwMinorVersion:=0;
dwlConditionMask:=0;
VerSetConditionMask(dwlConditionMask,VER_MAJORVERSION,VER_GREATER_EQUAL);
VerSetConditionMask(dwlConditionMask,VER_MINORVERSION,VER_GREATER_EQUAL);
bl:=VerifyVersionInfo(TOSVersionInfoEx(Addr(VsInfo)^),VER_MAJORVERSION and VER_MINORVERSION,dwlConditionMask) ; /*[dcc32 Error] APubUnit.pas(852): E2033 Types of actual and formal var parameters must be identical*/
if bl then
Result :='Win10';
end;
uj5u.com熱心網友回復:
找到問題了,必須要用TOSVersionInfoExW(Addr(VsInfo)^才行,但是在window申明是一樣的,winapi.windows
TOSVersionInfoExW = _OSVERSIONINFOEXW;
TOSVersionInfoEx = TOSVersionInfoExW;
uj5u.com熱心網友回復:
可以使用ntdll的RtlGetVersion。GetVersionEx并沒有廢掉,在win10下它回傳6.2,非常恰如其分地說明了win10的性質(windows7是6.1)。
uj5u.com熱心網友回復:
很不幸,VerifyVersionInfo也不行,看來真的只能用RtlGetVerSion了uj5u.com熱心網友回復:
在程式中加入一個兼容性manifest就可以了,參見:https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396看來ms的內核組是想把核心版本和產品版本區分開來。
uj5u.com熱心網友回復:
都win10了啊uj5u.com熱心網友回復:
在win10下它回傳6.2win10的性質(windows7是6.1)
差別不甚大?
uj5u.com熱心網友回復:
核心的差別很小,win7和win8/8.1/10之間的差別也就是win2000和winxp之間的差別。uj5u.com熱心網友回復:
接分 結貼吧轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81151.html
上一篇:delphi EX7移動開發
下一篇:delphi資料庫連接多次會報錯
