我使用spirit mini_c样本进行了一些测试.不幸的是,它没有像预期的那样保持运算符的优先级:
int main()
{
return 3 > 10 || 3 > 1;
}
Run Code Online (Sandbox Code Playgroud)
评估为0.
return (3 > 10) || (3 > 1);
Run Code Online (Sandbox Code Playgroud)
返回1
我试图移动"||"的定义 和"&&"到构造函数的顶部
template <typename Iterator>
expression<Iterator>::expression(
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何事情.如何解决这个问题.我正在使用boost 1.3.38.
在长期操作期间,我们的C++ Win32应用程序显示一个带有进程条的模态状态对话框,每隔几秒左右就会更新一次.从Windows 7开始,我们意识到Windows很快会显示一条消息"似乎挂起......"和/或在我们的窗口标题栏中附加"不响应".
我们发现进程对话框必须处理消息以避免这种情况.更具体地说,似乎Windows 7不断发送WM_UPDATE消息以检查我们的程序是否存活.我们以前在此对话框中禁用了所有不需要的消息处理,因为配置文件运行显示它们是一个主要的减速.
但是虽然我们认为已经修复了这个问题,但是用户再次报告了这些问题:Windows显示"似乎挂起......"和/或在我们的窗口标题栏中附加"不响应",尽管我们每隔几秒就会处理所有事件.
问题:
是否有关于Windows 7(或Windows Vista)中此行为更改的任何文档?我们还没有发现任何.我们还发现了许多其他消息传递行为的变化.
是否有可能从Windows禁用所有这样的"活着"检查?我们的应用程序非常活跃,流程可能需要很长时间.
编辑:更具体一点 - 我们每隔几秒钟才会调用消息泵PeekMessage/ TranslateMessage/ DispatchMessage.
由于这是一个相当古老的遗留程序,因此在不久的将来不可能使用单独的工作线程.我们当然会为新代码做到这一点.请注意,我的主要观点是这种行为肯定会在Windows Vista/Windows 7中发生变化.我还没有找到任何文档.
在我的桌面应用程序中,我使用boost :: asio添加了对各种Internet资源的访问.我所做的就是发送http请求(即映射磁贴服务器)并读取结果.我的代码基于asio sync_client示例.
现在,我收到了无法使用这些功能的客户的报告,因为他们在公司中运行代理.在Web浏览器中,他们可以输入代理的地址,一切都很好.我们的应用程序无法下载数据.
如何为我的应用程序添加此类支持?
我试图检索任务栏和/或我的应用程序主窗口的背景和文本颜色.原来,Windows 7没有返回正确的颜色.如果我切换到粉红色的主题,Windows 7仍然返回浅蓝色的窗口标题,虽然那不是真的.这发生在使用
GetSysColor(COLOR_ACTIVECAPTION);
Run Code Online (Sandbox Code Playgroud)
以及使用HTHEME hTheme = OpenThemeData(hwnd,L"WINDOW");
HRESULT result = GetThemeColor(
hTheme,
WP_CAPTION,
CS_ACTIVE,
TMT_FILLCOLORHINT,
&color);
Run Code Online (Sandbox Code Playgroud)
此外,我发现自己尝试各种参数组合来找出标题文本的颜色.我知道microsofts页面
但这些数百个参数的大多数组合都是无效的.是否有任何列表和/或描述可以使用哪些组合?
即
GetThemeColor(
hTheme,
WP_CAPTION, // BP_PUSHBUTTON,
CS_ACTIVE,
TMT_CAPTIONTEXT,
&color);
Run Code Online (Sandbox Code Playgroud)
返回"未找到元素".
在Win32中为了将数据粘贴到我必须调用的剪贴板中GlobalAlloc(),然后GlobalLock()获取指针,然后复制数据,然后调用GlobalUnlock()和SetClipboardData().
如果代码是在C++中,则可能在调用之间抛出异常GlobalLock(),GlobalUnlock()并且如果我不处理,GlobalUnlock()则不会调用它.
这是一个问题吗?如果我打电话GlobalLock(),无论出于何种原因跳过配对GlobalUnlock()电话会发生什么?
我google了很长一段时间才找到一个比较,显示插入/推送擦除/弹出等所有STL-Containers的复杂性差异.我没有找到任何.我的所有STL书籍也没有.任何提示?
我当然知道一些经验法则.但是定义在哪里?
在我的应用程序中,我有数百万个短字符串(大多数短于32个字符).我想实现一个带有附加列表的搜索框,该列表仅包含包含在搜索框中输入的整个字符串的元素.我怎样才能预建一个索引来快速找到这样的字符串?所有已排序的STL容器都会检查整个字符串.
对于输入的搜索字符串"str",我需要找到所有包含"str"的字符串:"main street","struve","ustr"等.
这总是让我误以为C和C++:
在我的头文件中,我有类似的东西:
bool UpdateWindow( int w, int h, char bpp, bool force, char* someOtherLongStuff )
Run Code Online (Sandbox Code Playgroud)
现在,如果我想因任何原因改变它,我必须在头文件和源文件中这样做 - 这在我看来很烦人.
有没有办法实现自动化?
我正在使用Visual Studio 2010
所以我有一个使用外部库的Visual Studio 2010项目,为了在没有LNK2005的情况下进行编译,我不得不在链接器设置中处理库的顺序.
我让它在发布模式下编译良好,但无论出于何种原因,我都无法在调试中没有LNK错误的情况下编译它.
是否通常无法忽略LNK2005并告诉链接器只使用他遇到的任何内容?
谢谢!
//编辑:这里是一些特殊问题输出的错误.但是我已经尝试以不同的方式解决这个问题,每个解决方案给我带来不同的链接器问题 因此,我正在寻找忽略LNK2005的一般解决方案
Error 7 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 8 error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 9 error LNK2005: _exit already defined in Libcmtd.lib(crt0dat.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 10 error LNK2005: __invalid_parameter already defined in Libcmtd.lib(invarg.obj)
...\msvcprtd.lib(MSVCP100D.dll)
...
Error 37 error LNK1169: one or more multiply defined symbols found
调试我的Win32应用程序时,窗口和对话框有时(很少)不会出现在所选的Windows方案中,而是减少或损坏:

窗口标题全部为黑色(而不是蓝色或银色),没有任何阴影.按钮没有任何按钮形状(屏幕截图中的"Abbrechen").下半部分的黑条是一个窗口进度条.发生这种情况时,它不会显示任何进展.
屏幕截图(中心的灰色细节)取自在XP SP3 x64和10 GB机器上的Visual Studio 2010下调试的64位应用程序.有足够的RAM(一些GB)备用.
有没有人知道原因?我从不做非客户区绘图或其他什么.
编辑:仅当Visual Studio调试程序已附加到该程序时,才会出现此症状.但即使应用程序已从调试器中分离出来,问题仍然存在.在没有调试的情况下启动程序时不会发生.
c++ ×8
winapi ×3
windows ×3
c ×2
stl ×2
windows-7 ×2
algorithm ×1
boost ×1
boost-asio ×1
boost-spirit ×1
debugging ×1
lnk2005 ×1
parsing ×1
performance ×1
proxy ×1
visual-c++ ×1
windows-xp ×1