当前位置: 代码迷 >> PB >> pb 获取ip地址解决方案
  详细解决方案

pb 获取ip地址解决方案

热度:95   发布时间:2016-04-29 05:50:25.0
pb 获取ip地址


forward
global type n_adapters from nonvisualobject
end type
end forward

global type n_adapters from nonvisualobject
end type
global n_adapters n_adapters

type prototypes
Function ulong GetLastError( &
) Library "kernel32.dll"

Function ulong FormatMessage( &
ulong dwFlags, &
ulong lpSource, &
ulong dwMessageId, &
ulong dwLanguageId, &
Ref string lpBuffer, &
ulong nSize, &
ulong Arguments &
) Library "kernel32.dll" Alias For "FormatMessageA"

Function ulong GetAdaptersInfo ( &
Ref IP_ADAPTER_INFO pAdapterInfo[], &
Ref ulong pOutBufLen &
) Library "iphlpapi.dll" Alias For "GetAdaptersInfo"

Subroutine CopyMemory ( &
Ref blob Destination, &
long Source[], &
long Length &
) Library  "kernel32.dll" Alias For "RtlMoveMemory"

Subroutine CopyMemory ( &
Ref integer Destination, &
blob Source, &
long Length &
) Library  "kernel32.dll" Alias For "RtlMoveMemory"

end prototypes

forward prototypes
public function string of_getlasterror ()
public function string of_nbr2hex (unsignedlong aul_number, integer ai_digit)
public function boolean of_getadaptersinfo (ref string as_macaddress[], ref string as_description[], ref string as_adaptername[], ref string as_ipaddress[])
public function string of_getaddr ()
end prototypes

public function string of_getlasterror ();// SCRIPT:     n_adapters.of_GetLastError
//
// PURPOSE:    This function returns the last Windows API error.
//
// RETURN:     Error message text
//
// -----------------------------------------------------------------------------

Constant ULong FORMAT_MESSAGE_FROM_SYSTEM = 4096
Constant ULong LANG_NEUTRAL = 0
String ls_buffer, ls_errmsg
ULong lul_error

lul_error = GetLastError()

ls_buffer = Space(255)

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, &
lul_error, LANG_NEUTRAL, ls_buffer, 255, 0)

ls_errmsg = "Error# " + String(lul_error) + "~r~n~r~n" + ls_buffer

Return ls_errmsg
end function

public function string of_nbr2hex (unsignedlong aul_number, integer ai_digit);// SCRIPT:     n_adapters.of_Nbr2Hex
//
// PURPOSE:    This function converts a number to a hex string.
//
// ARGUMENTS:  aul_number - A number to convert
// ai_digit - The number of hex digits expected
//
// RETURN:     Hex string
//
// -----------------------------------------------------------------------------

ULong lul_temp0, lul_temp1
Char lc_ret

If ai_digit > 0 Then
   lul_temp0 = Abs(aul_number / (16 ^ (ai_digit - 1)))
   lul_temp1 = lul_temp0 * (16 ^ (ai_digit - 1))
   If lul_temp0 > 9 Then
      lc_ret = Char(lul_temp0 + 55)
   Else
      lc_ret = Char(lul_temp0 + 48)
   End If
   Return lc_ret + of_Nbr2Hex(aul_number - lul_temp1, ai_digit - 1)
End If

Return ""
end function

public function boolean of_getadaptersinfo (ref string as_macaddress[], ref string as_description[], ref string as_adaptername[], ref string as_ipaddress[]);// SCRIPT:     n_adapters.of_GetAdaptersInfo
//
// PURPOSE:    This function returns information about network adapters.
//
// ARGUMENTS:  as_macaddress - Array of MAC addresses
// as_description - Array of Descriptions
// as_adaptername - Array of Adapter names
// as_ipaddress - Array of IP addresses
//
// -----------------------------------------------------------------------------

Constant ULong ERROR_SUCCESS = 0
Constant ULong ERROR_BUFFER_OVERFLOW = 111
IP_ADAPTER_INFO lstr_Adapter[]
ULong lul_OutBufLen
Integer li_idx, li_max, li_macidx, li_macmax, li_byte
Blob lblob_address
  相关解决方案