0

更新:我认为它是 Windsows.hi 需要包含并且您已经确认了这一点,但是当我包含它时,我会收到一堆消息,如下所示......

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

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


我正在尝试调用 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++ 别名?

干杯。

4

2 回答 2

4

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

在 Winuser.h 中声明,包括 Windows.h

所以,只需这样做:

#include <Windows.h>
于 2010-01-05T22:24:21.223 回答
1

当您在 C++/CLI Windows 窗体应用程序中 #include windows.h 时,您会遇到一些令人讨厌的符号名称冲突。但这是自我诱导的。在 WF 应用程序中注入您自己的消息循环是不合适的。它已经有一个,Application::Run()。您不能自己编写,您将无法适当地预处理消息以使诸如键盘快捷键之类的东西起作用。

在尝试之前,请先阅读一些 C++/CLI 编程教程。

于 2010-01-06T02:10:35.287 回答