This article was previously published under Q210571
Advanced: Requires expert coding, interoperability, and multiuser skills.
Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.
View products that this article applies to.
'*************************************************************
'Declarations section of the module.
'*************************************************************
Option Explicit
'=============================================================
' Arithmetic Method:
' ------------------
' Create the following ar_ConvertFromUnsignedInteger& (Uint%)
' and ar_ConvertToUnsignedInteger% (Bytes&) function in the
' Module. This first function reads in an unsigned integer
' and returns the converted value as a long. The second
' function reads in a long and returns an unsigned integer.
'=============================================================
Function ar_ConvertFromUnsignedInteger& (Uint%)
If Uint% < 0 Then
ar_ConvertFromUnsignedInteger& = Uint% + 65536
Else
ar_ConvertFromUnsignedInteger% = Uint%
End If
End Function
Function ar_ConvertToUnsignedInteger% (Bytes&)
If Bytes& > 32767 Then
ar_ConvertToUnsignedInteger% = Bytes& - 65536
Else
ar_ConvertToUnsignedInteger% = Bytes&
End If
End Function
'=============================================================
' Bitwise Method:
' ---------------
' Create the following bw_ConvertFromUnsignedInteger& (Uint%)
' and bw_ConvertToUnsignedInteger% (Bytes&) function in the
' Module. This first function reads in an unsigned integer
' and returns the converted value as a long. The second
' function reads in a long and returns an unsigned integer.
' The message box statement in the second function is used
' to prevent an overflow message when the value passed to
' the function is greater than 64 kilobytes.
' To illustrate what is taking place in the first bitwise function:
' Uint% equals -23584, a value returned from an external dynamic
' link library that is an unsigned integer and must be
' converted to an long:
' 1010001111100000 (-23584)
' AND 11111111111111 (7FFF)
' ----------------
' 10001111100000 (41952)
'=============================================================
Function bw_ConvertToUnsignedInteger% (Bytes&)
Dim x%
If Bytes& > 65535 Then
MsgBox "You passed a value larger than 65535"
Exit Function
End If
x% = Bytes& And &H7FFF
bw_ConvertToUnsignedInteger% = x% Or -(Bytes& And &H8000)
End Function
Function bw_ConvertFromUnsignedInteger& (Uint%)
bw_ConvertFromUnsignedInteger& = Uint% And &HFFFF&
'-------------------------------------------------------------
' The &HFFFF& requires the & at the end of the hex number. This
' qualifies the hex number as 32-bit versus 16-bit.
'-------------------------------------------------------------
End Function
Declare Function External_Call% Lib "your.dll" (ByVal ValueToPass%)
x% = External_Call(bw_ConvertToUnsignedInteger%(41952))
y& = bw_ConvertFromUnsignedInteger&(x%)
Keywords: KB210571, kbprogramming, kbhowto