你注册好后只要在vb里面
dim objDll as object
set objDll=createobject("dllname.classname")无需引用,也不必考虑dll路径

解决方案 »

  1.   

    COM不关心文件位置甚至机器位置
      

  2.   

    to cooking:怎么不能用的???!!
      

  3.   

    有两种,com是需要注册的,但静态的是不需要注册的。
      

  4.   

    用app或sys路径

    下面这个模块可以在没有声明的情况下调用DLL中的函数。Attribute VB_Name = "Call_API"
    Option Explicit
    '***********************************************
    '* This module use excelent solution from
    '* http://www.vbdotcom.com/FreeCode.htm
    '* how to implement assembly calls directly
    '* into VB code.
    '***********************************************
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long)
    Private mlngParameters() As Long 'list of parameters
    Private mlngAddress As Long 'address of function to call
    Private mbytCode() As Byte 'buffer for assembly code
    Private mlngCP As Long 'used to keep track of latest byte added to codePublic Function CallApiByName(libName As String, funcName As String, ParamArray FuncParams()) As Long
      Dim lb As Long, i As Integer
      ReDim mlngParameters(0)
      ReDim mbytCode(0)
      mlngAddress = 0
      lb = LoadLibrary(ByVal libName)
      If lb = 0 Then
          MsgBox "DLL not found", vbCritical
          Exit Function
      End If
      mlngAddress = GetProcAddress(lb, ByVal funcName)
      If mlngAddress = 0 Then
          MsgBox "Function entry not found", vbCritical
          FreeLibrary lb
          Exit Function
      End If
      ReDim mlngParameters(UBound(FuncParams) + 1)
      For i = 1 To UBound(mlngParameters)
          mlngParameters(i) = CLng(FuncParams(i - 1))
      Next i
      CallApiByName = CallWindowProc(PrepareCode, 0, 0, 0, 0)
      FreeLibrary lb
    End FunctionPrivate Function PrepareCode() As Long
        Dim lngX As Long, codeStart As Long
        ReDim mbytCode(18 + 32 + 6 * UBound(mlngParameters))
        codeStart = GetAlignedCodeStart(VarPtr(mbytCode(0)))
        mlngCP = codeStart - VarPtr(mbytCode(0))
        For lngX = 0 To mlngCP - 1
            mbytCode(lngX) = &HCC
        Next
        AddByteToCode &H58 'pop eax
        AddByteToCode &H59 'pop ecx
        AddByteToCode &H59 'pop ecx
        AddByteToCode &H59 'pop ecx
        AddByteToCode &H59 'pop ecx
        AddByteToCode &H50 'push eax
        For lngX = UBound(mlngParameters) To 1 Step -1
            AddByteToCode &H68 'push wwxxyyzz
            AddLongToCode mlngParameters(lngX)
        Next
        AddCallToCode mlngAddress
        AddByteToCode &HC3
        AddByteToCode &HCC
        PrepareCode = codeStart
    End Function