How to Pass & Return Unsigned Integers to DLLs from VB

Last reviewed: June 21, 1995
Article ID: Q112673
The information in this article applies to:

- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 1.0, 2.0, and 3.0

SUMMARY

Visual Basic supports signed integers, not unsigned integers. Therefore, the valid range of values, for an integer variable, is from -32767 to +32767.

The C language supports unsigned integers, which have a range from 0 to 65536. To pass a value within the range 32767 to 65536, you need to do a conversion in code to see the correct results. This article shows you how.

MORE INFORMATION

Visual Basic stores its integer variables in an 8-bit data field, as does C. Visual Basic uses signed integers only, so it reserves one of the bits as a sign bit. In C, you have the choice of an unsigned integer (the variable ranges from 0 to 65536) or a signed integer (the variable ranges from -32767 to +32767 as do Visual Basic integer variables).

Step-by-Step Example

Follow a process similar to the following to pass a value greater than 32767 as an integer from Visual Basic to a dynamic link library (DLL) that is expecting an unsigned integer or to return an integer value that is outside the range of valid Visual Basic integers:

  1. Start a new project in Visual Basic. Form1 is created by default.

  2. Add the following code to the general declarations section of Form1. Note that you must actually have a DLL that takes an unsigned integer as a parameter.

       ' MyLong is a function in a DLL that takes an unsigned integer as a
       ' parameter and returns the same value passed in. To run this sample you
       ' will have to create the MYLONG function. Enter the following Declare
       ' statement as one, single line:
       Declare Function MyLong Lib "MyLong.DLL" (ByVal iInt AS Integer)
          As Integer
    
    

  3. Add a command button (Comamnd1) to Form1.

  4. Add the following code to the Command1_Click event:

       Sub Command1_Click()
          Dim lValue As Long
          Dim i As Integer, w As Integer
          ' Initialize lvalue:
          lValue = 40000
          If lValue > 32767 Then
             w = lValue - 65536
          Else
             w = lValue     ' Just pass it on
          End If
          ' Call a DLL that is expecting an unsigned integer.
          ' For this example, the MyLong function will return
          ' the same value passed in.
          i = MyLong(w)
    
          ' Convert returned value:
          If i < 0 Then
             lValue = 65536 + i
          Else
             lValue = i
          End If
          ' Display the results:
          Print Str(lValue)
       End Sub
    
    

  5. Run the program.


Additional reference words: 3.00
KBCategory: kbprg kbcode
KBSubcategory: APrgOther


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 21, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.