如何在9x和nt下运行不同的函数?

askppp 2003-12-15 08:05:11
我现在想调用:
GlobalMemoryStatusEx()//2000,xp以上
GlobalMemoryStatus()//所有系统均可

所以我想在nt3.5,4及9x用下面那个,在2000,xp,2003用上面那个函数
...全文
45 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
askppp 2003-12-16
  • 打赏
  • 举报
回复
先谢谢Onega(www.fruitfruit.com)的建议,但我不知如何做。

我现在如果:

HMODULE hdll=LoadLibrary(_T("Kernel32.dll"));
if(GetProcAddress(hdll,"GlobalMemoryStatusEx"))
{//GlobalMemoryStatusEx()}
else
{//GlobalMemoryStatus()}

如果这样的话,应该和前面两位的结果一样吧。因为程序初始化时就会自动查找是否有这两个函数,一旦发现没有就会报错。
Onega 2003-12-16
  • 打赏
  • 举报
回复
//check disk space
ULARGE_INTEGER i64FreeBytesToCaller,i64TotalBytes,i64FreeBytes;
DWORD dwSectPerClust,dwBytesPerSect,dwFreeClusters,dwTotalClusters;
BOOL fResult;
typedef BOOL (CALLBACK* GETDISKFREESPACEEX)(
LPCTSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailable,
PULARGE_INTEGER lpTotalNumberOfBytes,
PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

GETDISKFREESPACEEX pGetDiskFreeSpaceEx;
if(sizeof(TCHAR)==sizeof(char))
pGetDiskFreeSpaceEx =(GETDISKFREESPACEEX) GetProcAddress( GetModuleHandle(_T("kernel32.dll")),
("GetDiskFreeSpaceExA"));
else
pGetDiskFreeSpaceEx = (GETDISKFREESPACEEX) GetProcAddress( GetModuleHandle(_T("kernel32.dll")),
("GetDiskFreeSpaceExW"));
if (pGetDiskFreeSpaceEx)
{
fResult = pGetDiskFreeSpaceEx (GetAppPath(),
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
if(fResult)
{
INT64 ifree = i64FreeBytesToCaller.QuadPart;
if(ifree < 1024*1024*100)
AfxMessageBox(_T("磁盘空间不足!建议整理磁盘"));
else
Verbose(_T("disk space is enough"));
}
else
AfxMessageBox(_T("检查磁盘空间失败"));
// Process GetDiskFreeSpaceEx results.
}

else
{
fResult = GetDiskFreeSpace (GetAppPath(),
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters);

// Process GetDiskFreeSpace results.
if(fResult)
{
if(dwFreeClusters*dwSectPerClust*dwBytesPerSect<1024*1024*100)
AfxMessageBox(_T("磁盘空间不足!建议整理磁盘"));
else
Verbose(_T("disk space is enough"));
}
else
AfxMessageBox(_T("检查磁盘空间失败"));
}
Onega 2003-12-15
  • 打赏
  • 举报
回复
LoadLibrary(...)
GetProcAddrss("GlobalMemoryStatusEx"); //check if GlobalMemoryStatusEx is available
askppp 2003-12-15
  • 打赏
  • 举报
回复
回复楼上的:

你们的方法我当然试过,在9x里运行会出现找不到GlobalMemoryStatusEx()函数的错误信息。

我想是要靠宏命令预编译才行,但不知如何写。
glacierrr 2003-12-15
  • 打赏
  • 举报
回复
dwVersion = GetVersion();

// Get the Windows version.

dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));

// Get the build number for Windows NT/Windows 2000 or Win32s.

if (dwVersion < 0x80000000) // Windows NT/2000
dwBuild = (DWORD)(HIWORD(dwVersion));
else if (dwWindowsMajorVersion < 4) // Win32s
dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000);
else // Windows 95/98 -- No build number
dwBuild = 0;

具体自己再看看 msdn好了
zjg751206 2003-12-15
  • 打赏
  • 举报
回复
那要先判断操作系统版本。有个函数我不记得了,
if(版本>nt 4.0)
{
GlobalMemoryStatusEx()//2000,xp以上
..................

}else
{
GlobalMemoryStatus()//所有系统均可
...............
}
那个函数肯定能查到的

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧