在我的C++应用程序的GUI对象中,我在主窗口过程中有以下内容:
case WM_SIZE:
{
OutputDebugString(L"WM_SIZE received.\n");
RECT rect = {0};
GetWindowRect(hwnd, &rect);
if (!PostMessage(0, GUI_MSG_SIZECHANGED, w, MAKELONG(rect.bottom - rect.top, rect.right - rect.left))) {
OutputDebugString(L"PostMessage failed.\n"); // <--- never called
}
}
return 0; // break;
Run Code Online (Sandbox Code Playgroud)
GUI对象还具有以下getMessage()方法:
int GUI::getMessage(MSG & msg) {
BOOL result = 0;
while ((result = GetMessage(&msg, 0, 0, 0)) > 0) {
if (msg.message > (GUI_MSG_BASE-1) && msg.message < (GUI_MSG_LAST+1)) {
OutputDebugString(L"GUI message received.\n");
break;
}
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
应用程序对象以下列方式调用此方法:
while …Run Code Online (Sandbox Code Playgroud) 我正在制作个人使用的程序,定期擦除几个网页.其中一个需要使用SSL,其主URL实际上是一个负载均衡器,每次重定向到一个不同的域,从少数列表中(不确定这是否相关).我对libcurl和SSL很新,所以我可能会遗漏一些明显但我不这么认为的东西.
该程序运行良好一段时间(到目前为止,从不超过一个小时),但一旦它第一次得到SSL连接错误,它将每次都给出相同的错误.在开始失败之前,它总是一个不同的时间量和不同数量的成功请求.
错误缓冲区始终包含以下内容: schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326) - This error usually occurs when a fatal SSL/TLS alert is received (e.g. handshake failed). More detail may be available in the Windows System event log.
没有什么用处eventvwr.对该错误代码的搜索会返回有关早期版本的Windows Server上的自签名证书问题的结果,但很少有其他问题.我不控制我正在连接的服务器,但我怀疑它是一个Windows框.
我在这里已经没有想法,所以我只是要提供任何可能相关的细节.我不能真正发布任何实际的源代码,因为我已经在几个类中抽象了所有的curl调用,所以我必须粘贴很多样板代码才能让别人理解它.我已经使用Visual Studio调试器确认这是实际调用的结果.
在创建任何其他线程之前,我在主线程中初始化libcurl,如下所示: curl_global_init(CURL_GLOBAL_WIN32 | CURL_GLOBAL_SSL);
然后我在第二个线程中创建并初始化实际的curl句柄,并且仅在该线程中,如下所示:
m_handle = curl_easy_init();
curl_easy_setopt(m_handle, CURLOPT_WRITEDATA, this);
curl_easy_setopt(m_handle, CURLOPT_WRITEFUNCTION, write);
curl_easy_setopt(m_handle, CURLOPT_DEBUGDATA, this);
curl_easy_setopt(m_handle, CURLOPT_DEBUGFUNCTION, debug);
curl_easy_setopt(m_handle, CURLOPT_VERBOSE, 1);
curl_easy_setopt(m_handle, CURLOPT_ERRORBUFFER, &m_errormsg[0]);
curl_easy_setopt(m_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(m_handle, CURLOPT_COOKIEFILE, "");
Run Code Online (Sandbox Code Playgroud)
我已经尝试过同时设置CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER为0,但是这并没有帮助.
我内置的libcurl从curl-7.43.0.tar.gz …
CMake的新手,我很难理解如何使用生成器表达式.我正在尝试使用add_custom_command创建后生成命令将Qt DLL复制到可执行目录.
在Qt5WidgetsConfig.cmake我可以看到它创建QT5 ::小工具的目标不同的属性来引用的DLL,这取决于当前活动的配置.无论是IMPORTED_LOCATION_DEBUG或IMPORTED_LOCATION_RELEASE.我希望能够将$<CONFIG:Debug>生成器表达式用作一个条件if()但不起作用.
我的CMakeLists.txt:
# minimum version required for proper support of C++11 features in Qt
cmake_minimum_required(VERSION 3.1.0)
set(CMAKE_CONFIGURATION_TYPES Debug;Release)
# project name and version
project(TPBMon VERSION 0.0.0.1)
# Qt5 libs
find_package(Qt5Widgets REQUIRED)
# run Qt's MOC when needed
set(CMAKE_AUTOMOC ON)
add_executable(
tpbmon
src/main.cpp
src/mainwindow.hpp
src/mainwindow.cpp
)
target_link_libraries(tpbmon Qt5::Widgets)
set_target_properties(
tpbmon
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin
)
if(WIN32)
if($<CONFIG:Debug>)
get_target_property(WIDGETDLL Qt5::Widgets IMPORTED_LOCATION_DEBUG)
else($<CONFIG:Debug>)
get_target_property(WIDGETDLL Qt5::Widgets IMPORTED_LOCATION_RELEASE)
endif($<CONFIG:Debug>)
add_custom_command(
TARGET …Run Code Online (Sandbox Code Playgroud) 我目前正在用C++编写一些测试代码,这些代码使用PE文件来理解它的文件格式结构.我的项目设置为64位编译.在我的代码中,我打开%SystemRoot%\ system32\calc.exe并读取IMAGE_DOS_HEADER和IMAGE_NT_HEADERS结构.同时我使用十六进制编辑器插件在Notepad ++中打开了相同的calc.exe.我将我的代码读取的值与Notepad ++进行了比较,发现它们不同.我将calc.exe从System32复制到C:\ Temp\calc.exe,现在值匹配.
Notepad ++似乎是一个32位应用程序(尚未检查PE文件,但由于它默认安装到Program Files(x86),所以它似乎是一个安全的假设).
这个WinSxS在起作用吗?或者还有什么导致这个?哪个文件实际上被送到32位应用程序打开%SystemRoot%\ system32\calc.exe?
只是好奇.在此先感谢任何光线.