沙发
理论上GetVolumeInformation函数是可以的但是我试了一下,可以得到卷名和文件系统,但得不到硬盘序列号。
program test
use kernel32
integer(BOOL) :: iRes ! BOOL
character(5):: lpRootPathName="c:\" ! LPCSTR lpRootPathName
character(12):: lpVolumeNameBuffer ! LPSTR lpVolumeNameBuffer
integer(DWORD):: nVolumeNameSize=12 ! DWORD nVolumeNameSize
integer(LPDWORD):: lpVolumeSerialNumber=0 ! LPDWORD lpVolumeSerialNumber
integer(LPDWORD):: lpMaximumComponentLength=0 ! LPDWORD lpMaximumComponentLength
integer(LPDWORD):: lpFileSystemFlags=0 ! LPDWORD lpFileSystemFlags
character(10):: lpFileSystemNameBuffer ! LPSTR lpFileSystemNameBuffer
integer(DWORD):: nFileSystemNameSize=10 ! DWORD nFileSystemNameSize
ires = GetVolumeInformation( &
lpRootPathName, &
lpVolumeNameBuffer, &
nVolumeNameSize, &
lpVolumeSerialNumber, &
lpMaximumComponentLength, &
lpFileSystemFlags, &
lpFileSystemNameBuffer, &
nFileSystemNameSize)
print*,iRes
print*, lpRootPathName, &
lpVolumeNameBuffer, &
lpVolumeSerialNumber, &
lpMaximumComponentLength, &
lpFileSystemFlags, &
lpFileSystemNameBuffer
pause
end program
板凳
① 就是,楼上这个用法我也试过了,就是读不出序列号。
② 我想问的是,楼上对调用GetVolumeInformation时在fortran中定义相关参数熟悉和理解吗?
我对你上面的那几个整型使用loc()调用,结果返回Res=1,调用也成功了,但每次读出来的序列号都不一样,我想读出来的就是一堆乱码,无意义。有谁能进来解释解释关于调用带参数的win32API函数时,在fortran里如何设置参数的问题?
③ 在fortran中调用含有type类型的win32 API函数,目前我已实现,就剩下这个问题了,像GetVolumeInformation这样含整型和字符相关参数的调用,不知道如何在Fortran中设置参数定义了?
④ 另外,有谁还在使用cvf的编译器?是否清楚 % bc 能否运行。这个是我在一个文献资料中看到的,说是对Fortran实参的取址操作。但是,这个根本在Intel Fortran中运行不了,所以,后来查资料,发现有人提出用loc()来替代这个符号的功能,但是如②,出来的序列号是乱码。
⑤ 大家一起来讨论讨论哈。。。。
3 楼
4 楼
查看过,就是按那样定义的,依然读不出序列号
您尚未登录,请登录后再回复。点此登录或注册