visual c++ strange compile error...

Reply

Join Date: Jun 2004
Posts: 5
Reputation: alex130 is an unknown quantity at this point 
Solved Threads: 0
alex130 alex130 is offline Offline
Newbie Poster

visual c++ strange compile error...

 
0
  #1
Jun 7th, 2004
I'm trying to compile the following program (file named test.cpp):

#include "stdafx.h"

int main(int argc, char* argv[]){
INPUT *buffer = new INPUT[1]; //allocate a buffer
buffer->type = INPUT_MOUSE;
buffer->mi.dx = 100;
buffer->mi.dy = 100;
buffer->mi.mouseData = XBUTTON1;
buffer->mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
buffer->mi.time = 0;
buffer->mi.dwExtraInfo = 0;
SendInput(1,buffer,sizeof(INPUT));
delete (buffer); //clean up our messes.
}

when "stdafx.h" is:

#pragma once

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <windows.h>

Then I get the following errors:

e:\test\src\test.cpp(4) : error C2065: 'INPUT' : undeclared identifier
e:\test\src\test.cpp(4) : error C2065: 'buffer' : undeclared identifier
e:\test\src\test.cpp(4) : error C2061: syntax error : identifier 'INPUT'
e:\test\src\test.cpp(5) : error C2227: left of '->type' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(5) : error C2065: 'INPUT_MOUSE' : undeclared identifier
e:\test\src\test.cpp(5) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(6) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(6) : error C2228: left of '.dx' must have class/struct/union type
e:\test\src\test.cpp(6) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(7) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(7) : error C2228: left of '.dy' must have class/struct/union type
e:\test\src\test.cpp(7) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(8) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(8) : error C2228: left of '.mouseData' must have class/struct/union type
e:\test\src\test.cpp(8) : error C2065: 'XBUTTON1' : undeclared identifier
e:\test\src\test.cpp(8) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(9) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(9) : error C2228: left of '.dwFlags' must have class/struct/union type
e:\test\src\test.cpp(9) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(10) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(10) : error C2228: left of '.time' must have class/struct/union type
e:\test\src\test.cpp(10) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(11) : error C2227: left of '->mi' must point to class/struct/union type is ''unknown-type''
e:\test\src\test.cpp(11) : error C2228: left of '.dwExtraInfo' must have class/struct/union type
e:\test\src\test.cpp(11) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(12) : error C2070: ''unknown-type'': illegal sizeof operand
e:\test\src\test.cpp(12) : error C3861: 'SendInput': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(12) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(12) : error C3861: 'INPUT': identifier not found, even with argument-dependent lookup
e:\test\src\test.cpp(13) : error C2541: 'delete' : cannot delete objects that are not pointers
e:\test\src\test.cpp(13) : error C3861: 'buffer': identifier not found, even with argument-dependent lookup

I'm using everyting as specified in MSDN, but still got this stupid compiler error. Have no idea why...
http://msdn.microsoft.com/library/de.../SendInput.asp
http://msdn.microsoft.com/library/de...ures/INPUT.asp

Obviously what I want is this code to compile and run

PS
When I compile it with only <winuser.h> (instead #include "stdafx.h" I write #include <winuser.h>), I get the following errors:

c:\...\include\winuser.h(39) : error C2146: syntax error : missing ';' before identifier 'HDWP'
c:\...\include\winuser.h(39) : fatal error C1004: unexpected end of file found

I've tried to compile both on VC++ 6.0 and .net and both produce the same errors!!!
Reply With Quote Quick reply to this message  
Join Date: May 2004
Posts: 256
Reputation: FireNet will become famous soon enough FireNet will become famous soon enough 
Solved Threads: 6
FireNet's Avatar
FireNet FireNet is offline Offline
Posting Whiz in Training

Re: visual c++ strange compile error...

 
0
  #2
Jun 7th, 2004
maybe you should try tinkering with the compiler options

or try including both winuser.h and stdafx.h
See what you can, remember what you need

Fourzon | Earn via Coding
Reply With Quote Quick reply to this message  
Join Date: Jun 2004
Posts: 1
Reputation: revilord is an unknown quantity at this point 
Solved Threads: 0
revilord revilord is offline Offline
Newbie Poster

Re: visual c++ strange compile error...

 
0
  #3
Jun 11th, 2004
I am having similar problems. Let us know if you find a solution. Thanks
Reply With Quote Quick reply to this message  
Join Date: Jun 2004
Posts: 3
Reputation: bobd is an unknown quantity at this point 
Solved Threads: 0
bobd bobd is offline Offline
Newbie Poster

Re: visual c++ strange compile error...

 
0
  #4
Jun 13th, 2004
I took a quick look at the code then tried to compile under VC7.1. It failed there too. I right clicked in the IDE to find the definition of INPUT which took me to WINUSER.H. Everything looked ok right there, but the looking up in the file I found that the definition of INPUT was guarded by a

#if (_WIN32_WINNT > 0x0400)

This _WIN32_WINNT define appears to limit access to specific functionality (including INPUT) to certain versions of windows. I looked to see where _WIN32_WINNT defined but could not find it quickly, however it was being tested with WINVER first thing in windows.h. It looks like it must be defined prior to including windows.h

I was able to cleanly compile by adding

#define _WIN32_WINNT 0x0501

as the first line in stdafx.h.

have fun
-bobd-
Reply With Quote Quick reply to this message  
Join Date: May 2004
Posts: 256
Reputation: FireNet will become famous soon enough FireNet will become famous soon enough 
Solved Threads: 6
FireNet's Avatar
FireNet FireNet is offline Offline
Posting Whiz in Training

Re: visual c++ strange compile error...

 
0
  #5
Jun 14th, 2004
Hey guys now be careful not to modify your actual headers it's not safe.Bodb, nice of you to check it out but that kinda protection is usally related to memory modes or some sort of diffrence in the way the compiled program inteacts with the system or is compatable with.Now in this particular case it may complie well but I would still recommend you change the options on your complier when you are compliing your program.That way you will be able to avoid any errors during runtime due to illegally structured programs.
See what you can, remember what you need

Fourzon | Earn via Coding
Reply With Quote Quick reply to this message  
Join Date: Jun 2004
Posts: 3
Reputation: bobd is an unknown quantity at this point 
Solved Threads: 0
bobd bobd is offline Offline
Newbie Poster

Re: visual c++ strange compile error...

 
0
  #6
Jun 15th, 2004
A little further searching for _WIN32_WINNT in the VS7 help index brings the following.

[Begin help file text ]
Certain functions that depend on a particular version of Windows are declared using conditional code. This enables you to use the compiler to detect whether your application uses functions that are not supported on its target version(s) of Windows. To compile an application that uses these functions, you must define the appropriate macros. Otherwise, you will receive the C2065 error message. The following table indicates the macros you must define to target each system.

Minimum system required Macros to define
Windows Server 2003 family _WIN32_WINNT>=0x0502
Windows XP _WIN32_WINNT>=0x0501
Windows 2000 _WIN32_WINNT>=0x0500
Windows NT 4.0 _WIN32_WINNT>=0x0400
Windows Me _WIN32_WINDOWS=0x0490
Windows 98 _WIN32_WINDOWS>=0x0410
Internet Explorer 6.0 _WIN32_IE>=0x0600
Internet Explorer 5.01, 5.5 _WIN32_IE>=0x0501
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE>=0x0500
Internet Explorer 4.01 _WIN32_IE>=0x0401
Internet Explorer 4.0 _WIN32_IE>=0x0400
Internet Explorer 3.0, 3.01, 3.02 _WIN32_IE>=0x0300


For example, to use the features specifically marked for Windows 2000 in the header files, you need to explicitly define _WIN32_WINNT as 0x0500 or greater. You can define the symbols using the #define statement in each source file, or by specifying the /D_WIN32_WINNT=0x0500 compiler option supported by Visual C++.

Visual C++ 6.0: To specify compiler options, go to the Projects menu and click Settings, then select the C/C++ tab.

Visual C++ 7.0: To specify compiler options, go to the Projects menu and click Properties.

[End help file text]

So, it looks like the INPUT structure was added to Windows after NT4. According to the SDK help, to get access to the "new" structures, you must either add a /D_WIN32_WINNT=0x0500 (or anything greater than 0x0400) to the compile options or add the define to one of your header files before you include windows.h.

I prefer putting project options of this nature in the source as it makes the OS dependency visible, browsable, and understandable (presuming an appropriate comment is included.) Since the IDE generates stdafx.h as the "general header" for all files in a project, I believe it is safe and reasonable to put the define for OS platform there.

I totally agree that windows.h or any headers not specific to a project should not be modified by a single project.

-bobd-
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Similar Threads
Other Threads in the C++ Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC