MFC程序运行的时候得到执行的代码行数,怎么得到程序运行的进度信息呢?

MFC程序运行的时候得到执行的代码行数,怎么得到程序运行的进度信息呢?

mfc

1个回答

代码行数和进度没有关系。比如说有个循环,你能根据行数知道执行了多少次么还需要执行多少次么?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC程序运行第一次完全正常 第二次执行出错
![图片说明](https://img-ask.csdn.net/upload/201501/04/1420374032_619635.png) 下面是代码 目的是要求出交通网中最短时间到达的最优路径 构造了时间树 这个只是MFC求最少时间的模块 其他的没有贴出来 第一次运行的时候正常 第二次就会出现图片的错误 查了好久 大多说是指针错误 看调用堆栈我也不太会看 而且调用堆栈里面还说user32.dll未加载符号 不知道是怎么回事 希望你们能给些建议 谢谢你们 分不多 可是我就只有这么多了 typedef struct QNode { int adjvex; struct QNode *next; }QNode; typedef struct { QNode *front; QNode *rear; }LinkQueue; typedef struct TimeNode { int adjvex; int route; double starttime; double endtime; struct TimeNode *child[MAX_PATH_NUM]; }TimeNode,*TimeTree; typedef struct Vehide { int number; double starttime; double endtime; double costtime; double costmoney; }Vehide; typedef struct { Vehide stata[MAX_PATH_NUM]; int last; }infolist; typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; infolist info; }ArcNode; typedef struct VNode { CString city; ArcNode *planefirstarc,*trainfirstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum,planearcnum,trainarcnum; }ALGraph; typedef struct Node { int adjvex; int route; struct Node *next; }Node; void LowTime2City(infolist arcs ,double &costtime , int &route) { int i; costtime = arcs.stata[1].costtime; if( costtime < INIFINTY) route = 1; else route = -1; for( i = 2; i <= arcs.last ;i++) { if (arcs.stata[i].costtime < costtime) { costtime = arcs.stata[i].costtime; route = i; } } } void CreateTimeTree(TimeTree p, int i,int j,LinkQueue &Q,infolist arcs[][MAX_VERTEX_NUM]) {//创建时间树 int n , x , y; TimeTree q; q = (TimeNode *)malloc(sizeof(TimeNode)); q->adjvex = j; q->starttime = arcs[i][j].stata[1].starttime; q->endtime = arcs[i][j].stata[1].endtime; q->route = 1; p->child[1] = q; for(n = 2;n <= arcs[i][j].last;n++) { q = (TimeNode *)malloc(sizeof(TimeNode)); q->adjvex = j; q->starttime = arcs[i][j].stata[n].starttime; q->endtime = arcs[i][j].stata[n].endtime; q->route = n; p->child[n] = q; } while (n < MAX_PATH_NUM) { p->child[n] = NULL; n++; } x = j; if ( !IsEmpty(Q)) { DeQueue(Q,y); CreateTimeTree(p->child[1],x,y,Q,arcs); for(n = 2;n <= arcs[i][j].last;n++) { CopyTimeTree(p->child[n],p->child[1]); } } else { for(n = 1; n<MAX_PATH_NUM;n++) { p->child[1]->child[n]= NULL; } for(n = 2; n <= arcs[i][j].last;n++) { CopyTimeTree(p->child[n],p->child[1]); } } return ; } void CopyTimeTree(TimeTree p,TimeTree q) {//复制时间树 TimeTree r; int n = 1; while(q->child[n] != NULL) { r = (TimeNode *)malloc(sizeof(TimeNode)); r->adjvex = q->child[n]->adjvex; r->starttime = q->child[n]->starttime; r->endtime = q->child[n]->endtime; r->route = q->child[n]->route; p->child[n] = r; CopyTimeTree(p->child[n],q->child[n]); n++; } while (n < MAX_PATH_NUM) { p->child[n] = NULL; n++; } return ; } void VisitTimeTree(TimeTree p) { int n ; int x; double y; x = time1; y = time2; int days = 1; CString str; CString starttime,sshour,ssmin; int ishour,ismin; starttime.Format(_T("%f"),p->starttime); sshour = starttime.Mid(8,2); ssmin = starttime.Mid(10,2); ishour = _ttoi(sshour); ismin = _ttoi(ssmin); CTime start(2004,10,1,ishour,ismin,0); CString time22,stime2hour,stime2min; int itime2hour,itime2min; time22.Format(_T("%f"),time2); stime2hour = stime2hour.Mid(8,2); stime2min = stime2min.Mid(10,2); itime2hour = _ttoi(stime2hour); itime2min = _ttoi(stime2min); CTime ttime2(2004,10,1,itime2hour,itime2min,0); CTimeSpan cost1 = start - ttime2; time1 = int (cost1.GetTotalMinutes()); if (time1 < 0) { time1 += 1440; } CString endtime,sehour,semin,seday; int iehour,iemin,ieday; endtime.Format(_T("%f"),p->endtime); seday = endtime.Mid(6,2); sehour = endtime.Mid(8,2); semin = endtime.Mid(10,2); iehour = _ttoi(sehour); iemin = _ttoi(semin); ieday = _ttoi(seday); CTime end(2004,10,ieday,iehour,iemin,0); cost1 = end - start; time1 += int(cost1.GetTotalMinutes()); time2 = p->endtime; c[p->adjvex] = p->route; if (p->child[1] == NULL) { if (time1 < time0) { time0 = time1; for ( n = 1;n <= MAX_VERTEX_NUM;n++) { d[n] = c[n]; } } } else { n = 1; while (p->child[n] != NULL) { VisitTimeTree(p->child[n]); n++; } } time1 = x; time2 = y; return ; } void TimeTreeDispose(Node *head , infolist arcs[][MAX_VERTEX_NUM]) {//构造时间树 int n , i , j; Node *p; LinkQueue Q; TimeTree root; root = (TimeNode *)malloc(sizeof(TimeNode)); InitQueue(Q); TTime = int(INIFINTY); p = head->next; while (p != NULL) { EnQueue(Q,p->adjvex); p = p->next; } DeQueue(Q,i); root->adjvex = i; DeQueue(Q,j); CreateTimeTree(root, i , j, Q , arcs); for(n = 1;n <= arcs[i][j].last;n++) { time1 = 0; time2 = root->child[n]->starttime; time0 = int(INIFINTY); VisitTimeTree(root->child[n]); if(time0 < TTime) { TTime = time0; p = head->next; while(p != NULL) { p->route = d[p->adjvex]; p = p->next; } } } return ; } void LowestTime(int k , infolist arcs[][MAX_VERTEX_NUM] , ALGraph G ,int v0 ,int v1,double T[],int Final[]) { int v , w , i , route; double m; Node *p , *q , *s , *t , *r; CString str1,str2; p = (Node *)malloc(G.vexnum*sizeof(Node)); for (v = 1;v <= G.vexnum ; v++) { Final[v] = FALSE; LowTime2City(arcs[v0][v] , T[v] , route); p[v].next = NULL; if (T[v] < INIFINTY) { q = (Node *)malloc(sizeof(Node)); s = (Node *)malloc(sizeof(Node)); q->adjvex = v0; s->adjvex = v; s->route = route; p[v].next = q; q->next = s; s->next = NULL; } } T[v0] = 0; Final[v0] = TRUE; for ( i = 2; i <= G.vexnum; i++) { m = INIFINTY; v = -1; for (w = 1;w <= G.vexnum; w ++) { if (Final[w] == FALSE) { if (T[w] < m) { v = w; m = T[w]; } } if (v == v1) { q = p[v].next; r = q->next; str1.Format(_T("最少时间旅行路线是:\n\n")); str2 = str1; while ( r != NULL) { if (k == 1) { str1.Format(_T("乘坐No.%d列车从%s到%s\n"),arcs[q->adjvex][r->adjvex].stata[r->route].number,G.vertices[q->adjvex].city,G.vertices[r->adjvex].city); str2 += str1; } if (k == 2) { str1.Format(_T("乘坐No.%d飞机从%s到%s\n"),arcs[q->adjvex][r->adjvex].stata[r->route].number,G.vertices[q->adjvex].city,G.vertices[r->adjvex].city); str2 += str1; } q = r; r = r->next; } MessageBox(NULL,str2,NULL,NULL); for (v = 1; v<= G.vexnum;v++) { q = p[v].next; while (q != NULL) { s = q; q = q->next; free(s); } p[v].next = NULL; } return ; } else if (v != -1) { Final[v] = TRUE; for (w = 1 ; w <= G.vexnum; w++) { if (Final[w] == FALSE&&arcs[v][w].last >0) { t = p[w].next; q = &p[w]; s = p[v].next; while (s != NULL) { r = (Node *)malloc(sizeof(Node)); r->adjvex = s->adjvex; r->route = s->route; q->next = r; q = r; s = s->next; } r = (Node *)malloc(sizeof(Node)); r->adjvex = w; r->route = route; r->next = NULL; q->next = r; TimeTreeDispose(&p[w],arcs); if (T[w] > TTime) { T[w] = TTime; while (t != NULL) { q = t; t = t->next; free(q); } } else { q = p[w].next; while (q != NULL) { r = q; q = q->next; free(r); } p[w].next = t; } } } } } } for (v = 1;v <= G.vexnum;v++) { q = p[v].next; while (q != NULL) { s = q; q = q->next; free(s); } p[v].next = NULL; } if ( k == 1 ) { str1.Format(_T("不存在列车从 %s 到 %s \n"),G.vertices[v0].city,G.vertices[v1].city); } else { str1.Format(_T("不存在飞机从 %s 到 %s \n"),G.vertices[v0].city,G.vertices[v1].city); } MessageBox(NULL,str1,_T("查询结果"),MB_OK|MB_ICONASTERISK); return ; }
一个简单的MFC程序,怎么对里面的字符串进行编译运行?
就是,在一个文本框edit中写好了一段代码(字符串)。怎么通过点击一个按钮,就对文本框里的代码进行编译并执行。 本人学的不深,求介绍得简单(。ì _ í。)
MFC程序,我想无限循环执行我的程序n次,但是每次都不能进入man.DoModal();
进入man.DoModal();后,运行几行就退出了,而以前单线程是可以正确执行完毕的,在任务管理器中可以看到线程不断增加,但就是不能正确执行完这个man.DoModal();函数,请问这是什么原因? static UINT ThreadFunc(LPVOID pParam)//线程函数声明 { WinMan man; man.DoModal(); return 0; } void CDemoDlg::OnBnClickedMfcbutton1() { // TODO: 在此添加控件通知处理程序代码 //ShowWindow(SW_HIDE); //man.DoModal(); for( ; ; ) { CWinThread *m_pThread = AfxBeginThread(ThreadFunc, NULL); Sleep(100); } }
新手做了个MFC程序程序,调试界面能出来了,但是按按钮没反应,弄了几天了。
新手做了个MFC程序程序,出错提示全改后运行,点击按钮没反应,只有界面显示,能帮我看看吗,弄了好几天了。 // MFCApplication2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication2.h" #include "MFCApplication2Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 HHOOK hHook; CTypedPtrList<CPtrList,EVENTMSG*> EventMsgList; class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCApplication2Dlg 对话框 CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication2Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFCApplication2Dlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication2Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication2Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCApplication2Dlg 消息处理程序 BOOL CMFCApplication2Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CMFCApplication2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton2() { UnhookWindowsHookEx(hHook); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } //LRESULT CMFCApplication2Dlg::JournalRecordPro(void) //{ // return LRESULT CALLBACK(); //} LRESULT CALLBACK CMFCApplication2Dlg::JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam) { if (nCode<0) return CallNextHookEx(NULL,nCode,wparam,lparam); EVENTMSG*pmsg=(EVENTMSG*)lparam; switch(nCode) { case HC_ACTION: {EVENTMSG * pEventMsg =new EVENTMSG; memcpy(pEventMsg,pmsg,sizeof(EVENTMSG)); EventMsgList.AddTail(pEventMsg);} break; case HC_SYSMODALOFF: break; case HC_SYSMODALON: break; } } LRESULT CALLBACK CMFCApplication2Dlg::JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam) { static unsigned i=0; static BOOL bFlag =TRUE; EVENTMSG*pMsg; POSITION pos; DWORD PreTime,NowTime; switch (nCode) { case HC_SKIP: bFlag =TRUE; i++; break; case HC_GETNEXT: if(i>=EventMsgList.GetCount()-2) { i=0; UnhookWindowsHookEx(hHook); AfxMessageBox(_T("回放完毕!")); } pos=EventMsgList.FindIndex(i); pMsg=EventMsgList.GetAt(pos); memcpy((LPEVENTMSG)lparam,pMsg,sizeof(EVENTMSG)); if((i)!=0 && bFlag==TRUE) { bFlag=FALSE; NowTime=pMsg->time; pos=EventMsgList.FindIndex(i-1); pMsg=EventMsgList.GetAt(pos); PreTime=pMsg->time; return NowTime-PreTime; } else return 0; break; default: return CallNextHookEx(NULL,nCode,wparam,lparam); } return 0; } // MFCApplication2Dlg.h : 头文件 // #pragma once // CMFCApplication2Dlg 对话框 class CMFCApplication2Dlg : public CDialogEx { // 构造 public: CMFCApplication2Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_MFCAPPLICATION2_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton1(); static LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam); static LRESULT CALLBACK JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam); 这两句是我在.h上加的用来申明全局函数。 };
VS2003 MFC 语音播报程序始终中断
基于VS2003,建立了一个MFC界面,上面只有一个按钮,功能是希望点击摁钮后发出文字语音。 网上了解到应使用Microsoft Speech SDK进行开发,方法如下完全按链接: http://blog.csdn.net/jmxiaocai/article/details/7036033 http://blog.csdn.net/hxmcnu/article/details/12444675 在SoundtestDlg.cpp中编写程序如下: // SoundtestDlg.cpp : 实现文件 ``` // SoundtestDlg.cpp : 实现文件 // #include "stdafx.h" #include "Soundtest.h" #include "SoundtestDlg.h" #include ".\soundtestdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialog { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CSoundtestDlg 对话框 CSoundtestDlg::CSoundtestDlg(CWnd* pParent /*=NULL*/) : CDialog(CSoundtestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSoundtestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CSoundtestDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) END_MESSAGE_MAP() // CSoundtestDlg 消息处理程序 BOOL CSoundtestDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将\“关于...\”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } void CSoundtestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSoundtestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标显示。 HCURSOR CSoundtestDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSoundtestDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 ISpVoice* pVoice; ::CoInitialize(NULL); HRESULT hr =CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,IID_ISpVoice, (void **)&pVoice); CString strText="语音测试";//引号是朗读的话 可以是中文 hr = pVoice->Speak(strText.AllocSysString(), 0, NULL); pVoice->Release(); pVoice = NULL; CoUninitialize(); } ``` 其中 ``` #include <sapi.h> #include <sphelper.h> #include <spuihelp.h> #pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll #pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置 ``` 等头文件写在了SoundtestDlg.h中 结果编译没有问题,但运行时,一旦我点击摁钮,就会发生如下问题,使程序中断,同时并没有发出任何声音: ![图片说明](https://img-ask.csdn.net/upload/201703/15/1489589703_816228.png) 不明白其中的原因何在,是否有可能是我 speech sdk 工具包安装存在问题?亦或是其他原因?
新手MFC求教,我用MFC做了一个用HOOK的电脑用录制回放器但是出完错后运行法相用不了。
能帮我看看哪有问题吗 // MFCApplication2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication2.h" #include "MFCApplication2Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 HHOOK hHook; CTypedPtrList<CPtrList,EVENTMSG*> EventMsgList; class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCApplication2Dlg 对话框 CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication2Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFCApplication2Dlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication2Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication2Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCApplication2Dlg 消息处理程序 BOOL CMFCApplication2Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CMFCApplication2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton2() { UnhookWindowsHookEx(hHook); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } //LRESULT CMFCApplication2Dlg::JournalRecordPro(void) //{ // return LRESULT CALLBACK(); //} LRESULT CALLBACK CMFCApplication2Dlg::JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam) { if (nCode<0) return CallNextHookEx(NULL,nCode,wparam,lparam); EVENTMSG*pmsg=(EVENTMSG*)lparam; switch(nCode) { case HC_ACTION: {EVENTMSG * pEventMsg =new EVENTMSG; memcpy(pEventMsg,pmsg,sizeof(EVENTMSG)); EventMsgList.AddTail(pEventMsg);} break; case HC_SYSMODALOFF: break; case HC_SYSMODALON: break; } } LRESULT CALLBACK CMFCApplication2Dlg::JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam) { static unsigned i=0; static BOOL bFlag =TRUE; EVENTMSG*pMsg; POSITION pos; DWORD PreTime,NowTime; switch (nCode) { case HC_SKIP: bFlag =TRUE; i++; break; case HC_GETNEXT: if(i>=EventMsgList.GetCount()-2) { i=0; UnhookWindowsHookEx(hHook); AfxMessageBox(_T("回放完毕!")); } pos=EventMsgList.FindIndex(i); pMsg=EventMsgList.GetAt(pos); memcpy((LPEVENTMSG)lparam,pMsg,sizeof(EVENTMSG)); if((i)!=0 && bFlag==TRUE) { bFlag=FALSE; NowTime=pMsg->time; pos=EventMsgList.FindIndex(i-1); pMsg=EventMsgList.GetAt(pos); PreTime=pMsg->time; return NowTime-PreTime; } else return 0; break; default: return CallNextHookEx(NULL,nCode,wparam,lparam); } return 0; } 调试后框里出来的东西: “MFCApplication2.exe”(Win32): 已加载“E:\PJB\MFCApplication2\Debug\MFCApplication2.exe”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\mfc110ud.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr110d.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.17784_none_a9f497a901334c74\comctl32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\combase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msctf.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shlwapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shell32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\uxtheme.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\dwmapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel.appcore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\SHCore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Users\Saber\AppData\Roaming\TaobaoProtect\TaobaoProtectSE.dll”。无法查找或打开 PDB 文件。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\psapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\version.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc_os.dll”。已加载符号。 程序“[10192] MFCApplication2.exe”已退出,返回值为 2 (0x2)。
MFC CString "="赋值出错
程序大致流程是:有两个输入通道从一个数据源接收数据放入自己的缓存里,再创建线程解析缓存里的数据,用来更新内存对象(这里是pStock对象),两个通道的解析数据的线程函数是同一个函数,下面是线程函数的一部分代码: pStock = FindStockByCode(csCode); switch (datatype) { case TIME : { pStock->m_SrcTime = data; CString temp = pStock->m_SrcTime.Right(8) ; pStock->m_csOrignTime = temp; //**运行到这里就出错** if (pStock->GetTimeFilterVal())//如果该品种需要进行时间参数过滤 { if (!pStock->CompareTime(pStock->m_SrcTime)) { CString csLog; csLog.Format("%s/%s:Lost Because CurTime--%s / SrcTime--%s \n",pStock->GetChName(),pStock->GetSrcCode(),CTime::GetCurrentTime().Format("%H:%M"),data) ; ShowAndWriteAlarmInfo(csLog) ;//log return ; } } } break; case ... //其他的case语句 } 程序可以运行一会,pStock->m_csOrignTime = temp; 这一句也会被执行n遍,但是在某一刻再次运行的时候就出错了,错误指到CString对象内部Release()函数
为什么类中的数组size会突然变大
vector<single*> ans; //类中的public成员变量 先在一个函数中为ans push_back了很多值 这里的size是正常的因为 for (int i = 0; i < ans.size(); i++) m_list.AddString(ans[i]->getNum()); 可以正常执行,在listbox上可以看到正确的运行结果 但是在另一个按钮响应函数中执行下列语句时则一直提示 遇到不适当的参数 void searchInfo::OnLbnDblclkList1() { // TODO: 在此添加控件通知处理程序代码 single *cur = ans[m_list.GetCurSel()]; infoDlg dlg(cur); dlg.DoModal(); } 在调试的时候发现数组的size本来是3的 在赋值语句时突然变成了很大的数,其中的值当然也都变了 应该就是因此导致了错误。 实在是百思不得其解
MFC中使用Update(FALSE)后变量不更新显示新的值
各位大佬麻烦帮忙看一下,放了一个static text的控件,在对话框中添加了下拉框的消息的处理函数,想要调用UpdateData(FALSE)函数将变量m_DriveType的值更新到界面上,但是运行后什么都没有。。 ``` // File1Dlg.cpp : 实现文件 // #include "stdafx.h" #include "File1.h" #include "File1Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CFile1Dlg 对话框 CFile1Dlg::CFile1Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CFile1Dlg::IDD, pParent) , m_DriverType(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CFile1Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO1, m_drive); DDX_Text(pDX, IDC_STATIC1, m_DriverType); } BEGIN_MESSAGE_MAP(CFile1Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_OK, &CFile1Dlg::OnBnClickedOk) ON_CBN_SELCHANGE(IDC_COMBO1, &CFile1Dlg::OnCbnSelchangeComboDrive) END_MESSAGE_MAP() // CFile1Dlg 消息处理程序 BOOL CFile1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 //第一次调用 size_t alldrive=::GetLogicalDriveStrings(0,NULL); _TCHAR *driverstr; driverstr=new _TCHAR[alldrive+sizeof(_T(""))]; //printf("AllDrivesize is: %d\r\n",alldrive); //第二次调用 size_t twosize=GetLogicalDriveStrings(alldrive,driverstr); CString DriveLetter; for(int i=0;i<alldrive/4;i++) { DriveLetter=driverstr+i*4; m_drive.InsertString(i,DriveLetter.GetBuffer()); } m_drive.SetCurSel(0); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CFile1Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CFile1Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CFile1Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CFile1Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CString strDrive; m_drive.GetWindowTextW(strDrive); this->MessageBox(strDrive.GetBuffer()); OnOK(); } void CFile1Dlg::OnCbnSelchangeComboDrive() { // TODO: 在此添加控件通知处理程序代码 CString m_DriveType; CString strDrive; int now=m_drive.GetCurSel(); m_drive.GetLBText(now,strDrive); // not // m_Drive.GetWindowText(strDrive); int retCode = ::GetDriveType(strDrive); switch (retCode) { case DRIVE_UNKNOWN: m_DriveType = "驱动器类型:未知"; break; case DRIVE_NO_ROOT_DIR: m_DriveType = "类型:驱动器根路径错误"; break; case DRIVE_REMOVABLE:// 2 m_DriveType = "类型:可移动磁盘驱动器"; break; case DRIVE_FIXED:// 3 m_DriveType = "类型:固定磁盘驱动器"; break; case DRIVE_REMOTE: m_DriveType = "类型:网络磁盘驱动器"; break; case DRIVE_CDROM: m_DriveType = "类型:CD-ROM"; break; case DRIVE_RAMDISK: m_DriveType = "类型:RAM"; break; default: m_DriveType = "类型:未知"; break; } UpdateData(FALSE); } ``` ![图片说明](https://img-ask.csdn.net/upload/201909/25/1569421005_977279.png) ![图片说明](https://img-ask.csdn.net/upload/201909/25/1569421041_644529.png) ps.变量类型是value还是control会影响UpdateData(FALSE)的调用吗??
MFC对话框初始化时新建线程,调用OPENCV显示视频文件的问题。
我用VS2010新建一个MFC对话框。 新建3个全局变量:IplImage *img;CvCapture* capture; int m_flag=0。(m_flag用来退出线程。) 在对话框上插入一个图片控件IDC_PTC。 在对话框的初始化函数中插入如下代码 ``` capture=cvCreateCameraCapture(0); if(!capture) { MessageBox(_T("打开摄像头失败!")); } else { m_flag=1; cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 800); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 800); cvSetCaptureProperty(capture, CV_CAP_PROP_FPS, 5); HANDLE hThread; hThread=CreateThread(NULL,0,FunProc1,(LPVOID)this,0,NULL); CloseHandle(hThread); } ``` 线程函数如下: ``` DWORD WINAPI CtestDlg::FunProc1(LPVOID lp) { CtestDlg* dlg=(CtestDlg*)lp; CWnd* wnd=(CWnd*)lp; CClientDC dc(wnd&&m_flag); RECT rect; (wnd->GetDlgItem(IDC_PTC))->GetWindowRect(&rect); wnd->ScreenToClient(&rect); img=cvQueryFrame(capture); CvvImage cvImg; while(img&&m_flag) { cvImg.CopyOf(img); cvImg.DrawToHDC(dc,&rect); img=cvQueryFrame(capture); } cvImg.Destroy(); return 1; } ``` 那么问题来了: 这样在线程函数开头插入断点"调试运行"对话框显示时就可以看到相机实时采集图像显示在图片控件内。 但是如果直接点“开始执行(不调试)”,目前所知有2种情况: 1、用USB接口相机,图片控件上不显示相机采集的视频。 2、用笔记本自带相机,图片控件上显示相机采集的视频。 这是为什么?还有下面2个问题如下: 3、“调试运行”对话框按正常流程退出。“开始执行(不调试)”对话框时不时的不正常退出(任务管理器可以看到程序在后台运行)。 4、如果把创建线程的函数放入到一个按钮里面,那么2个相机采集的视频都可以正常显示在图片控件里面。 望大神解答一下上面的疑问,我是自己没事自学的,没什么水平。
VS2010 MFC登录对话框打开数据库失败后意外出现主界面的问题
用VS2010 MFC建立了一个主界面为对话框的函数,要求需要登录对话框,且通过读取数据库来校验用户,代码如下: BOOL CManagementDlg::OnInitDialog()//主对话框初始函数 { CDialogEx::OnInitDialog(); _CLogInDlg dlgLogin; if(dlgLogin.DoModal() != IDOK)//登录对话框 { OnOK(); return TRUE; }_ // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 ShowWindow(SW_MAXIMIZE); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } 登录对话框响应登录按钮的代码如下: void CLogInDlg::OnClickedButtonLogin() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if(m_strLogUser.GetLength() == 0) { MessageBox(_T("请输入用户名!")); return; } CManagementDlg *pdlgMain = (CManagementDlg *)theApp.m_pMainWnd; CString strDataSource; CString strInitCatalog; CString strUser; CString strPassword; CString strTableName = _T(TABLE_NAME_STAFF); CAdoDBControl myAdoControl;//对象声明 CString strShow; UINT iGet = 0; iGet = CAdoDBControl::GetDbCfgFromIniFile(); if(iGet & INI_USERID_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_PWD_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户密码"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_DATASOURCE_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库主机名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_INITCATALOG_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_FILE_MISSING) { strShow.Format(_T("配置文件%s未找到"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } CAdoDBControl::GetDbCfg(strUser, strPassword, strDataSource, strInitCatalog); CString strSql; strSql.Format(_T("Provider=SQLOLEDB.1;Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Persist Security Info=FALSE"), strDataSource, strUser, strPassword, strInitCatalog); _int iResult = myAdoControl.Open(strSql.AllocSysString(), adModeUnknown); if(ADO_DB_SUCCESSFUL != iResult) { return; }_ strSql.Format(_T("SELECT * FROM %s WHERE 用户名='%s'"), strTableName, m_strLogUser); vector<vector<_variant_t>> vSelectResult = myAdoControl.Select(strSql.AllocSysString()); myAdoControl.Close(); int iFindNumber = vSelectResult.size(); if(iFindNumber < 1) { CString strMsg; strMsg.Format(_T("用户%s不存在"), m_strLogUser); MessageBox(strMsg); return; } _variant_t vUser = vSelectResult[0][STAFF_USERNAME_COLUMN]; _variant_t vPwd = vSelectResult[0][STAFF_PASSWORD_COLUMN]; CString strUserFromSql = (LPCTSTR)_bstr_t(vUser); CString strPwdFromSql = (LPCTSTR)_bstr_t(vPwd); if((!strUserFromSql.CompareNoCase(m_strLogUser)) && (strPwdFromSql == m_strLogPwd)) { pdlgMain->m_stCurUser.m_strUserName = strUserFromSql; _variant_t vElement = vSelectResult[0][STAFF_NO_COLUMN]; pdlgMain->m_stCurUser.m_strStaffNo = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_REALNAME_COLUMN]; pdlgMain->m_stCurUser.m_strRealName = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_AUTHORITY_COLUMN]; pdlgMain->m_stCurUser.m_strAuthority = (LPCTSTR)_bstr_t(vElement); OnOK(); } else { MessageBox(_T("密码错误")); } } 为了使按回车键和点击登录按钮的功能一样,添加如下代码: BOOL CLogInDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(WM_KEYDOWN == pMsg->message) { if(VK_RETURN == pMsg->wParam) { OnClickedButtonLogin(); return FALSE; } } return CDialogEx::PreTranslateMessage(pMsg); } 打开数据库的代码如下: int CAdoDBControl::Open(BSTR ConnectionString, long Options ) { if( FAILED( m_pConnection.CreateInstance(__uuidof(Connection)) ) ) //初始化Connection指针 { return ADO_DB_CREATE_FAIL; } try { m_pConnection->Open(ConnectionString, "", "", Options); } catch(_com_error e) { AfxMessageBox(e.Description()); return ADO_DB_OPEN_FAIL; } return ADO_DB_SUCCESSFUL; } 运行函数时,故意将数据库配置写错,在填写完用户名和密码后点击登录按钮,那么约10秒以后,程序报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。”,点击确定后,返回登录对话框。重复多次操作,依然如此。程序此时是正常的。 但是,如果在填写完用户名和密码后,用回车方式登录,此时依然报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server不存在或拒绝访问。”,但是在点击 确定后,登录对话框会消失,并且弹出主界面,且主界面不响应鼠标点击任何按钮,且主界面不是我想要的主界面(比如正常登录的主界面是最大化的,而此时出现 的主界面不是最大化的),此问题100%复现。 请问各位达人,这是怎么回事?有何解决办法?
求助:MFC下隐藏进程不完全
我写了个打开计算器并且可以隐藏计算器进程的代码 如图,按下打开计算器后 ![图片说明](https://img-ask.csdn.net/upload/201810/15/1539600310_76474.png) 但是在按下隐藏计算器后,出现了问题 ![图片说明](https://img-ask.csdn.net/upload/201810/15/1539600339_906451.png) 会留下底框 下面是隐藏计算器的代码 ``` myEnumWindow(NULL, id1); HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); DWORD id; PROCESSENTRY32 pe; pe.dwSize = sizeof(pe); BOOL ret = Process32First(hSnapshot, &pe); string a; string str; char buf[50000]; int r = 0; while (ret) { WCHAR* wc = pe.szExeFile; _bstr_t b(wc); char *c = b; string d(c); id = pe.th32ProcessID; if (d == "Calculator.exe") { r = 1; break; } ret = Process32Next(hSnapshot, &pe); } EnumWindows(findEnumWindowCallBack, id); for (int j = 0;j < i;j++) { ::ShowWindow(c[j], SW_HIDE); } i = 0; ``` 我这个小白实在是无能为力,求各位帮助。 刚刚又执行了几次,发现只有计算器会出现问题, 改成记事本,cmd.exe都可以隐藏。 我又试了一下,在网上下载了xp系统的计算器后,发现程序可以运行 难道是win10的计算器有什么不一样吗?
mfc通过ado连接access 老是无效指针,求高手指点
// Snake.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "afxwinappex.h" #include "afxdialogex.h" #include "Snake.h" #include "MainFrm.h" #include "winsock2.h" #include "SnakeDoc.h" #include "SnakeView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CSnakeApp BEGIN_MESSAGE_MAP(CSnakeApp, CWinAppEx) ON_COMMAND(ID_APP_ABOUT, &CSnakeApp::OnAppAbout) // 基于文件的标准文档命令 ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew) ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen) END_MESSAGE_MAP() // CSnakeApp 构造 CSnakeApp::CSnakeApp() { m_bHiColorIcons = TRUE; // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS; #ifdef _MANAGED // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则: // 1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。 // 2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。 System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException); #endif // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式 //为 CompanyName.ProductName.SubProduct.VersionInformation SetAppID(_T("Snake.AppID.NoVersion")); // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CSnakeApp 对象 CSnakeApp theApp; // CSnakeApp 初始化 BOOL CSnakeApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinAppEx::InitInstance(); AfxEnableControlContainer(); AfxOleInit(); m_pConnection.CreateInstance(__uuidof(Connection)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。 try { // 打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb", "", "", adModeUnknown); } catch (_com_error& e) { //调用在CAdoRWAccessDlg中打印错误信息的静态函数 //CAboutDlg::dump_com_error(e); return FALSE; } // 初始化 OLE 库 /*if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; }*/ AfxEnableControlContainer(); EnableTaskbarInteraction(FALSE); // 使用 RichEdit 控件需要 AfxInitRichEdit2() // AfxInitRichEdit2(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) InitContextMenuManager(); InitKeyboardManager(); InitTooltipManager(); CMFCToolTipInfo ttParams; ttParams.m_bVislManagerTheme = TRUE; theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL, RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams); // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSnakeDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CSnakeView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准 shell 命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->MoveWindow(0,0,645,645,1); m_pMainWnd->CenterWindow(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 return TRUE; } int CSnakeApp::ExitInstance() { //TODO: 处理可能已添加的附加资源 AfxOleTerm(FALSE); return CWinAppEx::ExitInstance(); } // CSnakeApp 消息处理程序 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; public: void dump_com_error(_com_error &e); _RecordsetPtr m_pRecordset; //_RecordsetPtr m_pRecordset1; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); CListBox m_AccessList; }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_AccessList); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, &CAboutDlg::OnBnClickedButton1) END_MESSAGE_MAP() // 用于运行对话框的应用程序命令 void CSnakeApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } void CAboutDlg::dump_com_error(_com_error &e) { CString ErrorStr; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); ErrorStr.Format(L"\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n", e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription); //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息 ::OutputDebugString((LPCTSTR)ErrorStr); #ifdef _DEBUG AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); #endif } void CAboutDlg::OnBnClickedButton1() { _variant_t var; CString strName, strAge; m_AccessList.ResetContent(); strName = strAge = ""; try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { AfxMessageBox(L"表内数据为空"); return; } while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("time"); if (var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("score"); if (var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString(strName + " --> " + strAge); m_pRecordset->MoveNext(); } m_AccessList.SetCurSel(0); } catch (_com_error& e) { dump_com_error(e); } } // CSnakeApp 自定义加载/保存方法 void CSnakeApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); } void CSnakeApp::LoadCustomState() { } void CSnakeApp::SaveCustomState() { } // CSnakeApp 消息处理程序
在vs2010中利用mfc写一个连连看游戏时各种资源窗口啥的等都报“未声明的标识符”问题
写这个连连看游戏刚开始导入各种资源文件改好ID后运行正常,但通过进一步的编程后不知道为什么开始报各种”未声明的标识符“bug(可能中途改了一些什么设置.....),现项目最近运行的log文件如下: ``` 生成启动时间为 2016/5/26 17:37:08。 1>项目“C:\Users\Aliez\documents\visual studio 2010\Projects\Lianliankan\LLK\LLK.vcxproj”在节点 2 上(build 个目标)。 1>InitializeBuildStatus: 正在对“Debug\LLK.unsuccessfulbuild”执行 Touch 任务。 ClCompile: 所有输出均为最新。 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\LLK.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt stdafx.cpp stdafx.cpp C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LLK.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt GameControl.cpp GameDlg.cpp GameLogic.cpp LLK.cpp LLKDlg.cpp LLKDlg.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.h(14): error C2065: “IDD_LLK_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C2146: 语法错误: 缺少“;”(在标识符“m_GameC”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(17): error C2065: “IDD_GAME_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(23): error C2065: “IDD_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(54): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(66): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(66): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(67): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(67): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(79): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(79): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(80): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(87): error C2065: “IDS_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(92): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(108): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(161): error C2065: “IDB_MAIN_BG”: 未声明的标识符 LLK.cpp GameLogic.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(15): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(15): error C2065: “s_nRows”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(16): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(16): error C2065: “s_nCols”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(17): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(17): error C2065: “s_nPicNum”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(70): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(70): error C2065: “s_nRows”: 未声明的标识符 GameDlg.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C2146: 语法错误: 缺少“;”(在标识符“m_GameC”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(17): error C2065: “IDD_GAME_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(32): error C2065: “IDB_Game_BG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(41): error C2065: “IDC_BTN_START”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(41): error C2065: “IDC_BTN_START”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(54): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(55): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2065: “CGameControl”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2146: 语法错误: 缺少“;”(在标识符“ctr”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2065: “ctr”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(110): error C2065: “ctr”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(110): error C2228: “.StartGame”的左边必须有类/结构/联合 类型是“'unknown-type'” 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(116): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(116): error C2065: “s_nRows”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(117): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(117): error C2065: “s_nCols”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(125): error C2065: “m_GameC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(125): error C2228: “.GetElement”的左边必须有类/结构/联合 类型是“'unknown-type'” GameControl.cpp 正在生成代码... 1>已完成生成项目“C:\Users\Aliez\documents\visual studio 2010\Projects\Lianliankan\LLK\LLK.vcxproj”(build 个目标)的操作 - 失败。 生成失败。 已用时间 00:00:15.03 ``` 有关LLKDlg.cpp代码如下: ``` // LLKDlg.cpp : 实现文件 // #include "stdafx.h" #include "LLKDlg.h" #include "afxdialogex.h" #include <afxwin.h> #include "GameDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD =IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CLLKDlg 对话框 CLLKDlg::CLLKDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CLLKDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CLLKDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CLLKDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_BASIC, &CLLKDlg::OnBnClickedBtnBasic) ON_BN_CLICKED(IDC_BTN_BASIC, &CLLKDlg::OnBnClickedBtnBasic) END_MESSAGE_MAP() // CLLKDlg 消息处理程序 BOOL CLLKDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 InitBackground(); // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CLLKDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) ==IDM_ABOUTBOX)//IDM_ABOUTBOX { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CLLKDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else {//创建CPanitDC对象 CPaintDC dc(this); dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);//绘制背景图片 CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CLLKDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CLLKDlg::InitBackground() { CClientDC dc(this);//获得对话框的视频内存 CBitmap bmpMain; bmpMain.LoadBitmap(IDB_MAIN_BG); m_dcMem.CreateCompatibleDC(&dc);//创建与视频内存兼容的内存DC m_dcMem.SelectObject(bmpMain);//将位图组员选入DC //调整窗口大小 CRect rtWin; CRect rtClient; this->GetWindowRect(rtWin);//获得窗口大小 this->GetClientRect(rtClient);//获得客户区大小 //标题栏和外边框的大小 int nSpanWidth = rtWin.Width()-rtClient.Width(); int nSpanHeight = rtWin.Height()-rtClient.Height(); //设置窗口大小 MoveWindow(0,0,800+nSpanWidth,600 + nSpanHeight); CenterWindow(); } void CLLKDlg::OnBnClickedBtnBasic() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::ShowWindow(SW_HIDE); CGameDlg dlg; dlg.DoModal(); } ``` ![图片说明](https://img-ask.csdn.net/upload/201605/26/1464256700_607782.png) 总之希望解决这里各种报”未声明的标识符“问题,有关资源ID我都已经改过与代码中一致了,然而....... 因为老师布置作业要求入了mfc这个坑,请各位前辈菊苣指教,万分感谢.....
利用detours Hook全局API的问题
在下利用微软的detours写了一个Hook全局MessageBox的dll,代码比较短,先贴下,然后再说问题: ``` #include"HookDll.h" #include <detours.h> #pragma comment(lib, "detours.lib") #pragma data_seg("Shared") HHOOK mHook = NULL; HINSTANCE hInstance = NULL; #pragma data_seg() int (WINAPI* OLD_MessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW; int (WINAPI* OLD_MessageBoxA)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) = MessageBoxA; //自定义的代替函数 int WINAPI NEW_MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) { int ret = OLD_MessageBoxW(hWnd, L"已经被Hook!", L"Hook", uType); return ret; } int WINAPI NEW_MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) { int ret = OLD_MessageBoxA(hWnd, "已经被Hook", "Hook", uType); return ret; } //启动Hook VOID Hook() { DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //Hook MessageBoxW和MessageBoxA DetourAttach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW); DetourAttach(&(PVOID&)OLD_MessageBoxA, NEW_MessageBoxA); DetourTransactionCommit(); } //撤销Hook VOID UnHook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //撤销Hook DetourDetach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW); DetourDetach(&(PVOID&)OLD_MessageBoxA, NEW_MessageBoxA); DetourTransactionCommit(); } //挂钩函数 LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(mHook, nCode, wParam, lParam); } //导出函数,安装一个针对WH_CALLWNDPROC的全局钩子 //WH_CALLWNDPROC:当目标线程调用SendMessage发送消息时,钩子函数被调用 extern "C" __declspec(dllexport) BOOL WINAPI Start() { mHook = ::SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, hInstance, 0); return mHook != NULL; } //卸载钩子 extern "C" __declspec(dllexport) void WINAPI Stop() { ::UnhookWindowsHookEx(mHook); } BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH://当DLL被某个进程加载时,执行该case下的语句体 { //在这里干两件事:1.启动Hook,Hook MessageBox // 2.获取本DLL的句柄 //之所以只调用一次Hook,后面解释 static int num = 1; if (1==num) { ++num; Hook(); } hInstance = (HINSTANCE)hModule; break; } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH://当DLL将被卸载时,执行下面的语句体 { //UnHook(); //如果这里加上UnHook(),那MessageBox就不能被Hook了,后面再详述 break; } } return TRUE; } ``` 在下在另一个MFC程序中加载上面的DLL,并且调用Start启动钩子。 按照在下的想法,当一个程序(假设为A)调用SendMessage函数发送消息时,系统会强行将该DLL映射到程序A的地址空间,并且执行case DLL_PROCESS_ATTACH下的语句体,即调用Hook函数,Hook程序A的MessageBox。 但事实是这样的: 在下在另一个C++程序中调用MessageBoxW,发现如下情况: 1.如果在case DLL_PROCESS_DETACH的语句体中加上UnHook调用,那么,无论调用多少次MessageBoxW,没有一次是被Hook的。 2.鉴于1,在下猜想可能是在调用MessageBoxW前就先执行UnHook了,于是干脆就将UnHook注释掉了,这是在调用MessageBoxW,发现,第一次调用没有被Hook,而后面再调用MessageBoxW就被Hook了。但这只是在下写的C++程序的表现,对于其它程序,如记事本,还依然没被Hook。 3.修改上面的DLL,不Hook MessageBox了,而改为Hook CopyFileW和Hook CopyFileA,这时,电脑上的复制粘贴都没有被Hook,自己写程序调用CopyFileW也没有被Hook,但是,在调用CopyFileW前调用一次MessageBoxW,后面的CopyFileW就被Hook了。 综上,在下的理解是:程序的一些行为,如调用MessageBox,才会导致调用SendMessage,进而导致加载DLL,这时才Hook相应的API。 在下想要的效果是:只要我运行一个程序(比如前边的启动钩子的MFC程序),电脑上所有的MessageBox都被Hook了。 在下对Windows消息机制不是特别熟悉,不知道在下的想法有问题还是代码写的有问题,还请诸位大神指点一二。在下先行谢过!
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥情况都不了解,就要指出一个方向,这实在是太难了。 因此今天我想从我学习 Spring Boot + Vue 这套技术栈的角度,来和大家聊一聊没有人指导,我是如何一步一步建立起自己的技术体系的。 线上大...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问