编译器找不到结构,我应该包括什么

时间:2010-01-05 22:20:28

标签: c++ visual-c++ data-structures managed-c++ peekmessage

更新: 我认为这是Windsows.h我需要包含并且你已经证实了这一点,但是当我确实包括它时,我得到了一堆如下的消息......

1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5934) : error C2872: 'IDataObject' : ambiguous symbol
1>        could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(251) : System::Windows::Forms::IDataObject IDataObject'
1>        or       'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject

我不知道如何解决这个问题,eik!


我正在尝试调用PeekMessage但是当我尝试编译时,我得到以下错误。

'MSG':未声明的标识符 'HWND':未声明的标识符 'PM_REMOVE':未声明的标识符

我的代码如下......

MSG message;
    while(form->Created)
                {
                    while( PeekMessage( &message, (HWND)form->Handle.ToPointer(), 0, 0, PM_REMOVE ) )
                    {
                        TranslateMessage( &message );
                        DispatchMessage( &message );
                        if( !mainWindow->Created )
                            break;
                    }
                }

我知道这些结构是什么,但可以让编译器识别它们。我错过了一个参考文献,或者是否存在VC ++别名?

干杯。

2 个答案:

答案 0 :(得分:4)

您需要包含包含这些定义的头文件。来自http://msdn.microsoft.com/en-us/library/ms644943%28VS.85%29.aspx

  

在Winuser.h中声明,包括   WINDOWS.H

所以,就这样做:

#include <Windows.h>

答案 1 :(得分:1)

当你在C ++ / CLI Windows窗体应用程序中#include windows.h时,你会得到几个令人讨厌的符号名称冲突。但这是自我诱导的。在WF应用程序中抽取自己的消息循环是合适的。它已经有一个,Application :: Run()。你不能自己写,你将无法正确预处理消息,使键盘快捷键等工作。

在尝试之前,先完成一些C ++ / CLI编程教程。