API函数到底怎么使用,教教小弟我
API函数到底如何使用,教教我?
Declare Function GetSystemDirectory Lib "Kernel "(ByVal lpBuffer As
String,ByVal nSize As Integer) As Integer
Function checkdir() As Boolean
Dim windir As String * 200
Dim winsys As String * 200
Dim winl As Integer
Dim wins As Integer
Dim s1 As String
Dim s2 As String
winl = GetWindowsDirectory(windir,200)
winl = GetSystemDirectory(winsys,200)
s1 = Mid $(windir,1,winl)
s2 = Mid $(winsys,1,wins)
If Wins = 0 Or wins = 0 Then
checkdir = False
Exit Function
End If
If s1 <> "C:\WINDOWS " Or s2 <> "C:\WINDOWS\SYSTEM " Then
checkdir = False
Exit Function
End If
checkdir = True
End Function
问题:这段代码是我在网上复制过来。在使用API函数的过程中
在API函数里定义的变量怎么都没使用到,像上面定义的API函数GetSystemDirectory里变量名为:lpBuffer, nSize 定义后下面的语句里都没使用到。难道不必用吗?还有一个问题就是上面定义的变量名为:windir,winsys 类型为字符串,一直都没有赋值怎么到下面的语句就作为其他函数的参数了呢。像winl = GetWindowsDirectory(windir,200), windir变量一直都没赋值到那怎么算出变量winl的值呢?同样像winl的还有s1 ,s2是怎么算出他们的值的?上面的语句内容为:
winl = GetWindowsDirectory(windir,200)
winl = GetSystemDirectory(winsys,200)
s1 = Mid $(windir,1,winl)
s2 = Mid $(winsys,1,wins)
好了。就写这么多了。有那位会的教教我。
------解决方案--------------------
。。。。API这东东,学起来还是比较多工作量的。。。。。。
实际上,API只是一个函数或者过程。举例说明,加入你写了以下函数来获取一个代表路径的字符串的长度:
public function getdirstrlen(byval dir as string) as long
getdirstrlen=len(dir)
end function
那么你应该如何调用呢?是不是下面的形式:
m_len=getdirstrlen( "c:\windows ")
而API函数的调用方法和这个是一样的!
Declare Function GetSystemDirectory Lib "Kernel "(ByVal lpBuffer As String,ByVal nSize As Integer) As Integer
是说明,在Kernel.DLL内,存在一个名为GetSystemDirectory的函数,其参数为lpBuffer(类型为STRING)和nSize(类型为INTEGER),那么调用的方法就是:
m_SysDir=(tmpStr,Len(tmpStr))
参考这个API函数的说明,可以知道,lpBuffer是该函数存储所得到的系统路径的字符串,而nSize则是我们所允许的这个路径的最大长度。所以,调用该函数后,我们所要得到的系统路径值存储在我们所传入的参数tmpStr中。
你所贴出的代码,获取系统路径后,去除了tmpStr中CHR(0)即STRING类型结束符以后的字符,这样做是正确的,当去掉这些多于的字符以后,得到的才是真正的系统路径。
看完我说的,回头再看看代码,真的是定义了以后没用吗?先要明白这个API的调用方法,在API声明中定义的变量,是你调用时的规范,是一种标志;从某种角度说,它们当中的每一个都像一个类,是没有被实例化的,而你传入参数后,它们就被实例化为你的参数,而且仅当按它们的定义方式正确的传入参数后,才能正确运行这个API。
------解决方案--------------------
如果是初学 建议先不弄api 有些必要的 只需要能理解什么意思就可以了
除了api还有很多可以学的呢,等绝着自己差不多了,在去看那个不迟
------解决方案--------------------
像上面定义的API函数GetSystemDirectory里变量名为:lpBuffer, nSize 定义后下面的语句里都没使用到。难道不必用吗?
------------------
楼主应该先一下基础!像lpBuffer, nSize是形参,它在checkdir这个函数是没有意义,它只是在GetSystemDirectory使用它,或对它赋值等一系列操作。像checkdir函数中的windir,winsys 变量,其实在GetSystemDirectory中,相当于lpBuffer,虽然在heckdir函数中没有对windir,winsys赋值(实际上VB自动对变量初始化),但是,在GetSystemDirectory中,对它们赋值了,所以,你调用完GetSystemDirectory就可以得到系统目录了
Declare Function GetSystemDirectory Lib "Kernel "(ByVal lpBuffer As
String,ByVal nSize As Integer) As Integer
Function checkdir() As Boolean
Dim windir As String * 200
Dim winsys As String * 200
Dim winl As Integer
Dim wins As Integer
Dim s1 As String
Dim s2 As String
winl = GetWindowsDirectory(windir,200)
winl = GetSystemDirectory(winsys,200)
s1 = Mid $(windir,1,winl)
s2 = Mid $(winsys,1,wins)
If Wins = 0 Or wins = 0 Then
checkdir = False
Exit Function
End If
If s1 <> "C:\WINDOWS " Or s2 <> "C:\WINDOWS\SYSTEM " Then
checkdir = False
Exit Function
End If
checkdir = True
End Function
问题:这段代码是我在网上复制过来。在使用API函数的过程中
在API函数里定义的变量怎么都没使用到,像上面定义的API函数GetSystemDirectory里变量名为:lpBuffer, nSize 定义后下面的语句里都没使用到。难道不必用吗?还有一个问题就是上面定义的变量名为:windir,winsys 类型为字符串,一直都没有赋值怎么到下面的语句就作为其他函数的参数了呢。像winl = GetWindowsDirectory(windir,200), windir变量一直都没赋值到那怎么算出变量winl的值呢?同样像winl的还有s1 ,s2是怎么算出他们的值的?上面的语句内容为:
winl = GetWindowsDirectory(windir,200)
winl = GetSystemDirectory(winsys,200)
s1 = Mid $(windir,1,winl)
s2 = Mid $(winsys,1,wins)
好了。就写这么多了。有那位会的教教我。
------解决方案--------------------
。。。。API这东东,学起来还是比较多工作量的。。。。。。
实际上,API只是一个函数或者过程。举例说明,加入你写了以下函数来获取一个代表路径的字符串的长度:
public function getdirstrlen(byval dir as string) as long
getdirstrlen=len(dir)
end function
那么你应该如何调用呢?是不是下面的形式:
m_len=getdirstrlen( "c:\windows ")
而API函数的调用方法和这个是一样的!
Declare Function GetSystemDirectory Lib "Kernel "(ByVal lpBuffer As String,ByVal nSize As Integer) As Integer
是说明,在Kernel.DLL内,存在一个名为GetSystemDirectory的函数,其参数为lpBuffer(类型为STRING)和nSize(类型为INTEGER),那么调用的方法就是:
m_SysDir=(tmpStr,Len(tmpStr))
参考这个API函数的说明,可以知道,lpBuffer是该函数存储所得到的系统路径的字符串,而nSize则是我们所允许的这个路径的最大长度。所以,调用该函数后,我们所要得到的系统路径值存储在我们所传入的参数tmpStr中。
你所贴出的代码,获取系统路径后,去除了tmpStr中CHR(0)即STRING类型结束符以后的字符,这样做是正确的,当去掉这些多于的字符以后,得到的才是真正的系统路径。
看完我说的,回头再看看代码,真的是定义了以后没用吗?先要明白这个API的调用方法,在API声明中定义的变量,是你调用时的规范,是一种标志;从某种角度说,它们当中的每一个都像一个类,是没有被实例化的,而你传入参数后,它们就被实例化为你的参数,而且仅当按它们的定义方式正确的传入参数后,才能正确运行这个API。
------解决方案--------------------
如果是初学 建议先不弄api 有些必要的 只需要能理解什么意思就可以了
除了api还有很多可以学的呢,等绝着自己差不多了,在去看那个不迟
------解决方案--------------------
像上面定义的API函数GetSystemDirectory里变量名为:lpBuffer, nSize 定义后下面的语句里都没使用到。难道不必用吗?
------------------
楼主应该先一下基础!像lpBuffer, nSize是形参,它在checkdir这个函数是没有意义,它只是在GetSystemDirectory使用它,或对它赋值等一系列操作。像checkdir函数中的windir,winsys 变量,其实在GetSystemDirectory中,相当于lpBuffer,虽然在heckdir函数中没有对windir,winsys赋值(实际上VB自动对变量初始化),但是,在GetSystemDirectory中,对它们赋值了,所以,你调用完GetSystemDirectory就可以得到系统目录了