我写了一个dll 但是不知道如何实现注册功能我想让dll 实现一个网站使用一个注册码我是想用IP和域名做为注册依据,编写asp的注册功能还不错 不过php调用不了网站的IP和域名等数据
各位大侠帮帮忙 怎么来实现注册码功能呢?!小弟万分感谢

解决方案 »

  1.   

    dll中我不知如何引用PHP的相关函数  以至于无非进行计算
    新建一个VB下的ActiveX   DLL工程,工程的名称Project1更改成ConDBDLL??   方法class1的名称更改成cs 
    工程名和方法名会在调用这个DLL的时候使用到,大家可以按照自己命名规则定义,但请注意好好使用。 
    这个DLL的代码部分书写如下: Dim   rp   As   Response 
    Dim   rq   As   Request 
    Dim   ap   As   Application 
    Dim   sr   As   Server 
    Dim   sn   As   Session Public   Sub   OnStartPage(MyScriptingContext   As   ScriptingContext) 
    Set   rp   =   MyScriptingContext.Response 
    Set   rq   =   MyScriptingContext.Request 
    Set   sr   =   MyScriptingContext.Server 
    Set   ap   =   MyScriptingContext.Application 
    Set   sn   =   MyScriptingContext.Session 
    End   Sub Public   Sub   OnEndPage() 
    Set   rp   =   Nothing 
    Set   rq   =   Nothing 
    Set   sr   =   Nothing 
    Set   ap   =   Nothing 
    Set   sn   =   Nothing 
    End   Sub 给这个工程添加 "Microsoft   Active   Server   Pages   ObjectContext   Object   Library "   的   Reference 
    添加方法,选择菜单中的 "Project "-> "Reference ",在打开的对话框里选择。 
    对了,还要选择上 "microsoft     activeX     data     objects     2.6     library " --------------------------
    如此就可以在asp页面中引用asp函数 比如我想用到的rq.ServerVariables("LOCAL_ADDR") 和 rq.ServerVariables("SERVER_NAME")
    通过这两个值就可以进行注册码计算不过这个方法在PHP页面中就出现错误调用不了上面的两个函数 导致错误不过小弟就是不知如何在dll中引用PHP函数来进行计算
      

  2.   

    用类似这样方法传进去
    Public Function GetSN(ip,svrname)
    '生成注册码
    'GetSN=....
    End Function
    <? 
    $obj=new COM("ConDBDLL.cs"); 
    $sn=$obj->GetSN($HTTP_SERVER_VARS["LOCAL_ADDR"],$HTTP_SERVER_VARS["SERVER_NAME"]); 
    ?> 
      

  3.   

    用类似这样方法传进去 
    Public Function GetSN(ip,svrname) 
    '生成注册码 
    'GetSN=.... 
    End Function 
    <?  
    $obj=new COM("ConDBDLL.cs");  
    $sn=$obj-> GetSN($HTTP_SERVER_VARS["LOCAL_ADDR"],$HTTP_SERVER_VARS["SERVER_NAME"]);  
    ?>传进去后怎么确认这是真的呢?
    注册码可以确认是真的,不过这个需要什么方法来确认是真的呢?!
    谢谢各位大侠的关注了哈 十分感谢
      

  4.   

    汗死,你注册码的计算过程是在dll中么?是的话就在dll中根据传入的ip和域名计算一次注册码,然后跟机器中保存的注册码核对一下。
      

  5.   

    我的思路是 在dll中把注册码解密一下 看是否和传入的IP和域名是否一致请问大哥的方法是?不过经大哥的一提示也对我大有启发
      

  6.   

    oh ha,那就这么做好了。我们的思路是一样滴
      

  7.   

    嘿嘿 小弟迟钝,现在才反应过来IP地址可以通过一下代码获取Private Const SOCKET_ERROR As Long = -1
    Private Const MAX_WSADescription = 256
    Private Const MAX_WSASYSStatus = 128
    Private Const ERROR_SUCCESS       As Long = 0
    Private Const WS_VERSION_REQD     As Long = &H101
    Private Const MIN_SOCKETS_REQD    As Long = 1
    Private Const WS_VERSION_MAJOR    As Long = WS_VERSION_REQD \ &H100 And &HFF&
    Private Const WS_VERSION_MINOR    As Long = WS_VERSION_REQD And &HFF&Private Type HOSTENT
        hName      As Long
        hAliases   As Long
        hAddrType  As Integer
        hLen       As Integer
        hAddrList  As Long
    End TypePrivate Type WSADATA
        wVersion      As Integer
        wHighVersion  As Integer
        szDescription(0 To MAX_WSADescription)   As Byte
        szSystemStatus(0 To MAX_WSASYSStatus)    As Byte
        wMaxSockets   As Integer
        wMaxUDPDG     As Integer
        dwVendorInfo  As Long
    End TypePrivate Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
    Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long
    Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
    Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
    Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)Private Function GetIPAddress(Optional sHost As String) As String
    '返回给定机器名的Ip地址,机器名为空时返回本机Ip地址
        Dim sHostName   As String * 256
        Dim lpHost      As Long
        Dim HOST        As HOSTENT
        Dim dwIPAddr    As Long
        Dim tmpIPAddr() As Byte
        Dim i           As Integer
        Dim sIPAddr     As String
        Dim werr        As Long    If Not SocketsInitialize() Then
            GetIPAddress = ""
            Exit Function
        End If
        
        If sHost = "" Then
            If gethostname(sHostName, 256) = SOCKET_ERROR Then
                werr = WSAGetLastError()
                GetIPAddress = ""
                SocketsCleanup
                Exit Function
            End If        sHostName = Trim$(sHostName)
        Else
            sHostName = Trim$(sHost) & Chr$(0)
        End If
        
        lpHost = gethostbyname(sHostName)    If lpHost = 0 Then
            werr = WSAGetLastError()
            GetIPAddress = ""
            SocketsCleanup
            Exit Function
        End If
        
        
        CopyMemory HOST, lpHost, Len(HOST)
        CopyMemory dwIPAddr, HOST.hAddrList, 4    ReDim tmpIPAddr(1 To HOST.hLen)
        CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen    For i = 1 To HOST.hLen
            sIPAddr = sIPAddr & tmpIPAddr(i) & "."
        Next    GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
        SocketsCleanup
    End FunctionPrivate Function SocketsInitialize(Optional sErr As String) As Boolean
        Dim WSAD As WSADATA, sLoByte As String, sHiByte As String
        If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
            sErr = "The 32-bit Windows Socket is not responding."
            SocketsInitialize = False
            Exit Function
        End If    If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
            sErr = "This application requires a minimum of " & _
                    CStr(MIN_SOCKETS_REQD) & " supported sockets."        SocketsInitialize = False
            Exit Function
        End If
        If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _
                (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _
                HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then        sHiByte = CStr(HiByte(WSAD.wVersion))
            sLoByte = CStr(LoByte(WSAD.wVersion))        sErr = "Sockets version " & sLoByte & "." & sHiByte & _
                    " is not supported by 32-bit Windows Sockets."        SocketsInitialize = False
            Exit Function
        End If
        SocketsInitialize = True
    End FunctionPrivate Sub SocketsCleanup()
        If WSACleanup() <> ERROR_SUCCESS Then
            App.LogEvent "Socket error occurred in Cleanup.", vbLogEventTypeError
        End If
    End SubPrivate Function HiByte(ByVal wParam As Integer)
        HiByte = wParam \ &H1 And &HFF&
    End FunctionPrivate Function LoByte(ByVal wParam As Integer)
        LoByte = wParam And &HFF&
    End FunctionIP地址可以通过GetIPAddress函数获取 不过域名就不知如何获取了这样同ip的网站就可以同时使用一个注册码了大侠我的QQ号是86781823 要是可以的话加QQ聊聊 不过还是谢谢你了哈