[RESOLVED] Windows API data types + LPCBYTE
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4

Thread: [RESOLVED] Windows API data types + LPCBYTE

  1. #1
    Join Date
    Jan 2002

    [RESOLVED] Windows API data types + LPCBYTE

    Can anyone tell me what an LPCBYTE is (found reading through someones code) and how it differs from a long pointer to byte LPBYTE? It doesn't seem to be part of the windows api ...

    A more general question - is there a simple reason why windows defines its own versions of the basic types (char as BYTE, short as WORD, long as DWORD).. and more importantly why you should use them?

    Many thanks in advance

  2. #2
    Join Date
    Sep 2001
    San Diego

    Re: Windows API data types + LPCBYTE

    LPCBYTE is a const LPBYTE or a const char * (as defined in ODBCSS.H)

    The API used its own defines so that it can remain consistent across all supported platforms. A WORD on a 16-bit platform, should be the same size as a WORD on a 64-bit platform (both 16-bit unsigned integers), whereas an int value is entirely different (16 vs 64).

    Hope this helps,

    - Nigel

  3. #3
    Join Date
    Mar 2018

    Re: Windows API data types + LPCBYTE

    Quote Originally Posted by NigelQ View Post
    LPCBYTE is a const LPBYTE
    This information is wrong LPCBYTE is not const LPBYTE! This makes the pointer itself constant not the value pointed to!

    Even const char* is the wrong track. BYTE should be unsigned, so const unsigned char* or const BYTE * (if windows.h is included) may be a way.

    PS: I know that the thread is old, but wrong information should be corrected (Just my 2 cents).

  4. #4
    2kaud's Avatar
    2kaud is online now Super Moderator Power Poster
    Join Date
    Dec 2012

    Re: Windows API data types + LPCBYTE

    Yes, I agree that wrong information should be corrected.

    LPCBYTE is defined as

    typedef const BYTE *LPCBYTE;
    with BYTE defined as

    typedef unsigned char BYTE;
    Hence LPCBYTE is actually

    typedef const unsigned char* LPCBYTE;
    which can be changed to be

    typedef unsigned char const * LPCBYTE;
    which can be read from right to left as
    a pointer to const unsigned char. ie a non-const pointer to const memory of type unsigned char.

    If it was a const pointer to non-const memory then the definition would be

    typedef BYTE * const CLPBYTE;
    which, from right to left, is const pointer to non-const BYTE (unsigned char).

    For a const pointer to const memory, it would be

    typedef BYTE const * const CLPCBYTE;

    typedef const BYTE * const CLPCBYTE;
    ie const pointer to const BYTE data.
    Last edited by 2kaud; March 8th, 2018 at 06:24 AM.
    All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!

    C++17 Compiler: Microsoft VS2017 (15.6.3)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Windows Mobile Development Center

Click Here to Expand Forum to Full Width

On-Demand Webinars (sponsored)