我想用ASP来调用生成的DLL文件,VB Active DLL是否可以获取服务端MAC地址

解决方案 »

  1.   


    Option ExplicitPublic CheckCode As LongPrivate Const NCBASTAT                       As Long = &H33
    Private Const NCBNAMSZ                       As Integer = 16
    Private Const HEAP_ZERO_MEMORY               As Long = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS       As Long = &H4
    Private Const NCBRESET                       As Long = &H32
    Private Type NCB
        ncb_command                                As Byte
        ncb_retcode                                As Byte
        ncb_lsn                                    As Byte
        ncb_num                                    As Byte
        ncb_buffer                                 As Long
        ncb_length                                 As Integer
        ncb_callname                               As String * NCBNAMSZ
        ncb_name                                   As String * NCBNAMSZ
        ncb_rto                                    As Byte
        ncb_sto                                    As Byte
        ncb_post                                   As Long
        ncb_lana_num                               As Byte
        ncb_cmd_cplt                               As Byte
        ncb_reserve(9)                             As Byte
        ncb_event                                  As Long
    End Type
    Private Type ADAPTER_STATUS
        adapter_address(5)                         As Byte
        rev_major                                  As Byte
        reserved0                                  As Byte
        adapter_type                               As Byte
        rev_minor                                  As Byte
        duration                                   As Integer
        frmr_recv                                  As Integer
        frmr_xmit                                  As Integer
        iframe_recv_err                            As Integer
        xmit_aborts                                As Integer
        xmit_success                               As Long
        recv_success                               As Long
        iframe_xmit_err                            As Integer
        recv_buff_unavail                          As Integer
        t1_timeouts                                As Integer
        ti_timeouts                                As Integer
        Reserved1                                  As Long
        free_ncbs                                  As Integer
        max_cfg_ncbs                               As Integer
        max_ncbs                                   As Integer
        xmit_buf_unavail                           As Integer
        max_dgram_size                             As Integer
        pending_sess                               As Integer
        max_cfg_sess                               As Integer
        max_sess                                   As Integer
        max_sess_pkt_size                          As Integer
        name_count                                 As Integer
    End Type
    Private Type NAME_BUFFER
        name                                       As String * NCBNAMSZ
        name_num                                   As Integer
        name_flags                                 As Integer
    End Type
    Private Type ASTAT
        adapt                                      As ADAPTER_STATUS
        NameBuff(30)                               As NAME_BUFFER
    End Type
    Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, _
                                                                         ByVal hpvSource As Long, _
                                                                         ByVal cbCopy As Long)
    Private Declare Function GetProcessHeap Lib "kernel32" () As Long
    Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, _
                                                       ByVal dwFlags As Long, _
                                                       ByVal dwBytes As Long) As Long
    Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, _
                                                      ByVal dwFlags As Long, _
                                                      lpMem As Any) As LongPublic Function GetMAC() As Integer  
      Dim bRet    As Byte
      Dim myNcb   As NCB
      Dim myASTAT As ASTAT
      Dim pASTAT  As Long
      Dim intMAC As Integer
      
        myNcb.ncb_command = NCBRESET
        bRet = Netbios(myNcb)
        With myNcb
            .ncb_command = NCBASTAT
            .ncb_lana_num = 0
            .ncb_callname = "* "
            .ncb_length = Len(myASTAT)
            pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, .ncb_length)
        End With
        If pASTAT = 0 Then
            Exit Function
        End If
        myNcb.ncb_buffer = pASTAT
        bRet = Netbios(myNcb)
        CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
        intMAC = myASTAT.adapt.adapter_address(0)
        intMAC = intMAC + myASTAT.adapt.adapter_address(1)
        intMAC = intMAC + myASTAT.adapt.adapter_address(2)
        intMAC = intMAC + myASTAT.adapt.adapter_address(3)
        intMAC = intMAC + myASTAT.adapt.adapter_address(4)
        intMAC = intMAC + myASTAT.adapt.adapter_address(5)
        GetMAC = intMAC
        Call HeapFree(GetProcessHeap(), 0, pASTAT)End FunctionPublic Function GetMACAddress() As String  
      Dim bRet    As Byte
      Dim myNcb   As NCB
      Dim myASTAT As ASTAT
      Dim pASTAT  As Long
        myNcb.ncb_command = NCBRESET
        bRet = Netbios(myNcb)
        With myNcb
            .ncb_command = NCBASTAT
            .ncb_lana_num = 0
            .ncb_callname = "* "
            .ncb_length = Len(myASTAT)
            pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, .ncb_length)
        End With
        If pASTAT = 0 Then
            Exit Function
        End If
        myNcb.ncb_buffer = pASTAT
        bRet = Netbios(myNcb)
        CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
        GetMACAddress = HexEx(myASTAT.adapt.adapter_address(0)) & "-" & HexEx(myASTAT.adapt.adapter_address(1)) & "-" & HexEx(myASTAT.adapt.adapter_address(2)) & "-" & HexEx(myASTAT.adapt.adapter_address(3)) & "-" & HexEx(myASTAT.adapt.adapter_address(4)) & "-" & HexEx(myASTAT.adapt.adapter_address(5))
        Call HeapFree(GetProcessHeap(), 0, pASTAT)End FunctionPrivate Function HexEx(ByVal B As Long) As String
     
      Dim aa As String    aa = Hex$(B)
        If Len(aa) < 2 Then
            aa = "0" & aa
        End If
        HexEx = aaEnd Function
    这段代码在标准的EXE工程中没有问题。如果写在VB Active DLL中应该如何调整。您只说调整时要注意什么就行了,谢谢
      

  2.   

    把上面代码写在Active DLL的类模块中,注意:外部接口函数要写成Public形式的,要有返回值。调用时,要先定义类对象,然后通过对象的方法、函数、属性得到返回值。由于我这台没有装VB6,无法测试了。
      

  3.   

    写dll呀
    1.打开VB6.0 
    2.选择 建立DLL应用程序. 
    3.点击确定按扭 
    4.将代码复制至代码窗口 
    5.点击菜单  文件=>编译成DLL=>选择保存位置. 
    6.OK.参考 http://topic.csdn.net/u/20090626/10/f739abc6-5dc6-4150-84d3-c204d7709b03.html
      

  4.   

    补了一下VB的知识,这下可以把ASP的核心全部封装成DLL了