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函数来进行计算
用类似这样方法传进去 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"]); ?>
用类似这样方法传进去 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"]); ?>传进去后怎么确认这是真的呢? 注册码可以确认是真的,不过这个需要什么方法来确认是真的呢?! 谢谢各位大侠的关注了哈 十分感谢
嘿嘿 小弟迟钝,现在才反应过来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聊聊 不过还是谢谢你了哈
新建一个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函数来进行计算
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"]);
?>
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"]);
?>传进去后怎么确认这是真的呢?
注册码可以确认是真的,不过这个需要什么方法来确认是真的呢?!
谢谢各位大侠的关注了哈 十分感谢
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聊聊 不过还是谢谢你了哈