我在网上看到了“访问违规”的一些问题,但这对我来说非常奇怪
我测试了一些“解决方案”但没有结果
这是一段代码:
TDateTime CFileVersionInfo::GetFileDate() const
{
FILETIME local;
SYSTEMTIME st;
TDateTime res;
FILETIME ft;
ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
FileTimeToLocalFileTime(&ft, &local);
FileTimeToSystemTime(&local, &st) ;
//GetLocalTime(st);
res = SystemTimeToDateTime(st) ;
return res;
}
我可以毫无问题地制作或构建程序,但是当我运行程序时,它会向我显示访问冲突错误,如果我评论该功能:
// TDateTime dateTime = fvi.GetFileDate();
程序运行完美
我不是C ++专业人士我只是想制作一个供个人使用的程序,所以我向专家提出这个问题
修改
我已经解决了问题
TDateTime CFileVersionInfo::GetFileDate() const
{
_FILETIME local;
_SYSTEMTIME st;
TDateTime res;
FILETIME ft;
ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
FileTimeToLocalFileTime(&ft, &local);
FileTimeToSystemTime(&local, &st) ;
GetLocalTime(&st); // <-- This is the solution.. for now...
res = SystemTimeToDateTime(st) ;
return res;
}
答案 0 :(得分:1)
您没有进行任何错误检查以确保API转换成功,因此您可能正在尝试转换垃圾数据。始终检查错误,例如:
TDateTime CFileVersionInfo::GetFileDate() const
{
FILETIME local;
SYSTEMTIME st;
FILETIME ft;
ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
if( FileTimeToLocalFileTime(&ft, &local) )
{
if( FileTimeToSystemTime(&local, &st) )
return SystemTimeToDateTime(st);
}
return 0.0;
}
答案 1 :(得分:1)
我已经解决了问题
TDateTime CFileVersionInfo::GetFileDate() const
{
_FILETIME local;
_SYSTEMTIME st;
TDateTime res;
FILETIME ft;
ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
FileTimeToLocalFileTime(&ft, &local);
FileTimeToSystemTime(&local, &st) ;
GetLocalTime(&st); // <-- This is the solution.. for now...
res = SystemTimeToDateTime(st) ;
return res;
}