Common Background Information:
I am trying to rebuild code for a working, commercially sold application with only partial build instructions. The previous maintainer of the code (a
mixture of C and C++) is no longer with the company, but when he built the code he used MSVC++, and though I am not certain of the version he was
using, I think it was either 4.0 or 6.0. I have only a little experience building with this environment (I am otherwise a seasoned developer) so I need
help getting past a couple of issues that I have encountered. Computers (and backups of those computers) previously used for running this build are
now completely unavailable.
I have set up the build on my system using MSVC++ 6.0. The source repository contained a workspace (.dsw) file that I am using for all of the projects. I
do not have specific instructions for this product on how to adjust the references to libraries, includes, etc. for a particular machine, but I am using
instructions for this from a similar (in terms of languages and tools used) product that was written around the same time. I have gotten 43 of 53 classes
(projects) to build, but am getting primarily two errors with the remaining 10 clases (projects).
Because I know this code base was building properly (for someone else who is no longer available on a machine that is no longer available), I would
strongly prefer adjustments to the build environment over code modification to get it to work, so please focus your assistance/suggestions in this area.
Thanks !
Problem #1: Error C2040: ... differs in levels of indirection from ...
Here are the exact error messages I am receiving:
Fxactn.cppThe first two errors and the last two errors come from the same include file. I put the errors twice simply to emphasize that I am receiving these errors
\develop\3rdParty\xvtdsp45\w32_x86\include\xvt_typ e.h(54) : error C2040: 'LONG_PTR' : 'long *' differs in levels of indirection from 'long'
\develop\3rdParty\xvtdsp45\w32_x86\include\xvt_typ e.h(55) : error C2040: 'ULONG_PTR' : 'unsigned long *' differs in levels of indirection from 'unsigned
long'
Fxapifun.cpp
C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\basetsd.h(92) : error C2040: 'LONG_PTR' : 'long' differs in levels of indirection from 'long *'
C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\basetsd.h(93) : error C2040: 'ULONG_PTR' : 'unsigned long' differs in levels of indirection from 'unsigned
long *'
Guicinit.cpp
\develop\3rdParty\xvtdsp45\w32_x86\include\xvt_typ e.h(54) : error C2040: 'LONG_PTR' : 'long *' differs in levels of indirection from 'long'
\develop\3rdParty\xvtdsp45\w32_x86\include\xvt_typ e.h(55) : error C2040: 'ULONG_PTR' : 'unsigned long *' differs in levels of indirection from 'unsigned
long'
on multiple source files. The middle two errors are only occurring once.
Here are lines 41 through 58 of xvt_type.h (apparently a third party include file):
Expand|Select|Wrap|Line Numbers
- typedef unsigned short T_LNUM;
- typedef unsigned short T_PNUM;
- typedef unsigned long XVT_COLOR_TYPE; /* Color Component Type (XVT_COLOR_* */
- /* The following legacy "data types" are being phased out, as they cause */
- /* problems with constness: "const int *x" is NOT same as "const INT_PTR x" */
- //typedef int *INT_PTR;
- typedef BOOLEAN *BOOLEAN_PTR;
- typedef char XVT_BYTE; /* raw data */
- typedef unsigned char XVT_UBYTE; /* raw data */
- typedef XVT_BYTE *DATA_PTR; /* ptr to arbitrary data - backwards compat. */
- typedef XVT_UBYTE *UDATA_PTR; /* unsigned ptr to arbitrary data */
- typedef XVT_UBYTE DATA_BYTE; /* for raw data */
- typedef long *LONG_PTR; /* THIS IS LINE 54 */
- typedef unsigned long *ULONG_PTR; /* THIS IS LINE 55 */
- /* define a point to function which will be used in xvt_win_enum_wins etc. */
- typedef XVT_CALLCONV_TYPEDEF( BOOLEAN, XVT_ENUM_CHILDREN, (WINDOW child, long data));
Expand|Select|Wrap|Line Numbers
- /*++
- Copyright (c) Microsoft Corporation. All rights reserved.
- Module Name:
- basetsd.h
- Abstract:
- Type definitions for the basic sized types.
- Author:
- Revision History:
- --*/
- #ifndef _BASETSD_H_
- #define _BASETSD_H_
- #if _MSC_VER > 1000
- #pragma once
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef signed char INT8, *PINT8;
- typedef signed short INT16, *PINT16;
- typedef signed int INT32, *PINT32;
- typedef signed __int64 INT64, *PINT64;
- typedef unsigned char UINT8, *PUINT8;
- typedef unsigned short UINT16, *PUINT16;
- typedef unsigned int UINT32, *PUINT32;
- typedef unsigned __int64 UINT64, *PUINT64;
- //
- // The following types are guaranteed to be signed and 32 bits wide.
- //
- typedef signed int LONG32, *PLONG32;
- //
- // The following types are guaranteed to be unsigned and 32 bits wide.
- //
- typedef unsigned int ULONG32, *PULONG32;
- typedef unsigned int DWORD32, *PDWORD32;
- #if !defined(_W64)
- #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
- #define _W64 __w64
- #else
- #define _W64
- #endif
- #endif
- //
- // The INT_PTR is guaranteed to be the same size as a pointer. Its
- // size with change with pointer size (32/64). It should be used
- // anywhere that a pointer is cast to an integer type. UINT_PTR is
- // the unsigned variation.
- //
- // __int3264 is intrinsic to 64b MIDL but not to old MIDL or to C compiler.
- //
- #if ( 501 < __midl )
- typedef [public] __int3264 INT_PTR, *PINT_PTR;
- typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
- typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
- typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;
- #else // midl64
- // old midl and C++ compiler
- #if defined(_WIN64)
- typedef __int64 INT_PTR, *PINT_PTR;
- typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
- typedef __int64 LONG_PTR, *PLONG_PTR;
- typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
- #define __int3264 __int64
- #else
- typedef _W64 int INT_PTR, *PINT_PTR;
- typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
- typedef _W64 long LONG_PTR, *PLONG_PTR;
- typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
- #define __int3264 __int32
- #endif
- #endif // midl64
- One possibility is that the previous builder of this code precompiled these (and probably all 3rd party and MS) headers separately using a different
environment or different settings prior to the build, and he had the pre-compiled headers available when he ran the main build, so he would not have
gotten these errors. - Another possibility is that the previous builder was using different settings for the compile than I am using -- perhaps a older version compatability
flag or something like that. However, if this was on the main build (as opposed to a separate run to precompile header files) I would expect that setting
to be in the saved workspace (.dsw) file. - The only other possibility that I have been able to come up with is that the previous builder was using or pointing to a later version of these header
files than I am. I will look into this possibility, but I wanted to go ahead and post to get the ball rolling first, in case someone else had other helpful
ideas.
Any thoughts or suggestions from an experienced MSVC++ user would be greatly appreciated.