python scrapy爬取XX基金
2020-12-23
需求:爬取XX基金的所有基金信息写入mongodb,同步到mysql并界面显示
CStdioFile Unicode ReadString 读取汉字乱码
2018-10-21 C++
1. Unicode 模式下ReadString 需要使用typebinary读取文本,中文才不会乱码
CStdioFile file;
if (file.Open(filePath, CFile::modeRead | CFile::typeBinary) == TRUE){
CString strLine(_T(""));
WORD sign;
file.Read(&sign, 2);
while (file.ReadString(strLine))
{
m_listInfo.InsertString(m_listInfo.GetCount(), strLine);
}
file.Close();
}
标签: MFC StdioFile ReadString
MFC CEdit背景透明,文字透明实现
2018-6-17
需求:不规则输入框实现
实现:
1. 响应对话框的WM_CTLCOLOR消息
获取EDIT对应的窗口背景色,设置画刷为NULL
if (nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(RGB(255, 255, 255));
pDC->SetBkMode(TRANSPARENT);
CDC* dc = GetDC();
CRect rc;
pWnd->GetWindowRect(rc);
ScreenToClient(rc);
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
2. 响应EN_CHANGE消息
获取控件所在的位置,通知窗口进行刷新
CRect rc;
GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowRect(&rc);
ScreenToClient(&rc);
InvalidateRect(&rc, TRUE);
windows程序崩溃时产生dmp
2017-12-30 C++
需求:windows程序崩溃时产生dmp
解决方案:
stdafx.h增加如下内容:
#include <Dbghelp.h>
//异常dmp捕获
void SetMyUnhandledExceptionFilter();
stdafx.cpp增加如下内容:
//生产DUMP文件
int GenerateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS pExceptionPointers, PTCHAR pwAppName)
{
BOOL bOwnDumpFile = FALSE;
HANDLE hDumpFile = hFile;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;
typedef BOOL(WINAPI * MiniDumpWriteDumpT)(
HANDLE,
DWORD,
HANDLE,
MINIDUMP_TYPE,
PMINIDUMP_EXCEPTION_INFORMATION,
PMINIDUMP_USER_STREAM_INFORMATION,
PMINIDUMP_CALLBACK_INFORMATION
);
MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;
HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll"));
if(NULL == hDbgHelp)
{
return EXCEPTION_EXECUTE_HANDLER;
}
pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
if(NULL == pfnMiniDumpWriteDump)
{
return EXCEPTION_EXECUTE_HANDLER;
}
if(hDumpFile == NULL || hDumpFile == INVALID_HANDLE_VALUE)
{
TCHAR szFileName[MAX_PATH] = { 0 };
TCHAR* szVersion = _T("v1.0");
int dwBufferSize = MAX_PATH;
SYSTEMTIME stLocalTime = { 0 };
GetLocalTime(&stLocalTime);
//wsprintf(szFileName, L"%s%s", szPath, szAppName);
//CreateDirectory(szFileName, NULL);
_stprintf_s(szFileName, MAX_PATH, _T("%s-%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp"),
pAppName,
szVersion,
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,
GetCurrentProcessId(), GetCurrentThreadId());
hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
}
if(hDumpFile != INVALID_HANDLE_VALUE)
{
ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = pExceptionPointers;
ExpParam.ClientPointers = FALSE;
pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &ExpParam : NULL), NULL, NULL);
CloseHandle(hDumpFile);
}
if(hDbgHelp != NULL)
{
FreeLibrary(hDbgHelp);
}
return EXCEPTION_EXECUTE_HANDLER;
}
LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
{
if (IsDebuggerPresent())
{
return EXCEPTION_CONTINUE_SEARCH;
}
return GenerateMiniDump(NULL, lpExceptionInfo, _T("XXXXX"));
}
void DisableSetUnhandledExceptionFilter()
{
void *addr = (void*)GetProcAddress(LoadLibrary(_T("kernel32.dll")) ,"SetUnhandledExceptionFilter");
if(addr)
{
unsigned char code[16] = { 0 };
int size = 0;
code[size++] = 0x33;
code[size++] = 0xC0;
code[size++] = 0xC2;
code[size++] = 0x04;
code[size++] = 0x00;
DWORD dwOldFlag,dwTempFlag;
VirtualProtect(addr, size, PAGE_READWRITE, &dwOldFlag);
WriteProcessMemory(GetCurrentProcess(), addr, code, size, NULL);
VirtualProtect(addr, size, dwOldFlag ,&dwTempFlag);
}
}
void SetMyUnhandledExceptionFilter()
{
SetUnhandledExceptionFilter(NULL);
SetUnhandledExceptionFilter(&ExceptionFilter);
DisableSetUnhandledExceptionFilter();
}
程序入口添加如下内容:
SetMyUnhandledExceptionFilter();
程序所在目录添加:DbgHelp.dll文件
ado open 连接数据库卡住
2017-12-3 C++
情景:
程序采用ado访问access数据库
现象:
公司编译生成的程序在公司的电脑上运行没问题,但是到了客户的电脑上运行就卡住!
解决办法:
通过打印调试信息,发现程序是卡在数据库open的时候,就不往下走了!
对比了下ado版本,发现客户电脑上的ado版本比公司编译环境的低!
替换掉客户端电脑上的msado.dll,问题解决
解决“应用程序无法启动,应用程序的并行配置不正确”
2016-9-10 C++
应用程序事件日志中:
“xxx.exe”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。 请使用 sxstrace.exe 进行详细诊断。
出现这类问题,是由于VS2008编译出来的程序文件,采用了manifest方式来指定dll文件。解决办法把相应的dll及mainifest放到程序目录底下
解决办法
在类似C:/Program Files/Microsoft Visual Studio 9/VC/redi
st/Debug_NonRedist/amd64Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把这几个文件拷贝到目标机器上,与运行程序同一文件夹
标签: MFC