API函数是否可用?是不是有的API在某些操作系统中不能使用的意思!

解决方案 »

  1.   

    MSDN中对API在那里使用不对有说明的吗?你的意思是要用代码来判断吗?
      

  2.   

    是的比如:
    AlphaBlend是Win98新增API,所以Win95下无法使用SetLayeredWindowAttributes是Win2000新增API,所以Win9X下无法使用
      

  3.   

    使用LoadLibrary,GetProcAddr
    来获取该函数是否存在,如果存在,则可以调用
      

  4.   

    MSDN中对API在那里使用不对有说明的吗?你的意思是要用代码来判断吗?
      

  5.   

    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As LongPrivate Function blnIsLibraryReady(ByVal strLibraryFile As String) As Boolean
        
        Dim o_lngRet As Long
        Dim o_lngDllversion As Long    o_lngRet = LoadLibrary(strLibraryFile)
        
        If (o_lngRet <> 0) Then
            
            o_lngDllversion = GetProcAddress(o_lngRet, "DllGetVersion")
            
            blnIsLibraryReady = (o_lngDllversion <> 0)
            
            FreeLibrary o_lngRet
            
        Else
            blnIsLibraryReady = False
        End IfEnd Function
    Private Sub Command1_Click()    MsgBox blnIsLibraryReady("x.dll")
        
    End Sub
      

  6.   

    Private Sub Command1_Click()    MsgBox blnIsLibraryReady("comctl32.dll")
        
    End Sub
      

  7.   

    不是comctl32.dll这样的dllAlphaBlend这样的API怎么判断?
      

  8.   

    Private Function blnIsAPIFuncReady(ByVal strLibraryFile As String, ByVal strFunction As String) As Boolean
        
        Dim o_lngRet As Long
        Dim o_lngDllversion As Long    o_lngRet = LoadLibrary(strLibraryFile)
        
        If (o_lngRet <> 0) Then
            
            o_lngDllversion = GetProcAddress(o_lngRet, strFunction)
            
            blnIsAPIFuncReady = (o_lngDllversion <> 0)
            
            FreeLibrary o_lngRet
            
        Else
            blnIsAPIFuncReady = False
        End IfEnd Function
      

  9.   

    MsgBox blnIsAPIFuncReady("comctl32.dll", "DllGetVersion")
      

  10.   

    MsgBox blnIsAPIFuncReady("msimg32.dll", "AlphaBlend")
      

  11.   


    在这里顺便问一问:
    可不可以动态连接API就是得到API可用后再将它连接进去
      

  12.   

    http://www.csdn.net/expert/topic/793/793043.xml?temp=.0714075
      

  13.   

    抢分了!!!!!我觉得要判断是否有用还不如去判断使用者的操作系统
    而且你如果知API所在的.DLL,你判断它的版本或者日期不行吗?
    方法是笨了点
    也还有点用吧,呵呵,我一直喜欢用笨办法解决问题
    想那么多干什么呢?
    只要我用的方法可以解决问题就行了
      

  14.   

    To bestofbest(咖啡):
    不行
    有时把相关Dll复制过去也能运行
      

  15.   

    好多的星星啊,呵呵,这个问题我也是满头星星……我是API菜鸟
    学习!!!!!!!!!!!!!