error C2039: “setWindowText”: 不是“ATL::CStringT<BaseType,StringTraits>”的成员

(1)这是一个显示插入电脑U盘信息的程序,在进行U盘的检测和扫描的主函数中,有2个error不知道怎么解决,我是MFC对话框写的,主要问题在控件的描述这里。
(2)主函数如下:

void CU_disk_detection_scanningDlg::OnEnChangeEdit1()
{
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialogEx::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。

    // TODO:  在此添加控件通知处理程序代码
}

char CU_disk_detection_scanningDlg::FirstDriveFromMask(ULONG unitmask)  //获取盘符   //不允许成员函数重新声明
{
    char i;
    //char unitmask;
    for(i = 0;i < 26;i++)
    {
        if(unitmask &0x1)
            break;
        unitmask = unitmask >>1;
    }
    return i;

}
LRESULT CU_disk_detection_scanningDlg::WindowProc(UINT message,WPARAM wparam,LPARAM lparam)
{
    CString detectMsg;

    char wParam ;
    char lParam ;
    switch (message)
    {
        //WM_DEVICECHANGE,系统硬件改变发出来的系统消息
    case WM_DEVICECHANGE:
        {
            PDEV_BROADCAST_HDR lpdb=(PDEV_BROADCAST_HDR)lparam;
            switch (wParam)                                                                              //char wParam;
            {
            case WM_DEVICECHANGE:
                break;
            case DBT_DEVICEARRIVAL:     //设备检测结束,并且可以使用......
                {
                    if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)    //逻辑卷
                    {
                        PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                        switch(lpdbv->dbcv_flags)
                        {
                        case 0:               //U盘
                            {
                                CString decDriver;
                                //char FirstDriveFromMask;

                                CString m_editControl;
                                //char setWindowText;
                                decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask);
                                detectMsg.Format(_T("检测到U盘:[%s]插入!"),decDriver.GetBuffer(0));
                                m_editControl.setWindowText(detectMsg);
                            }
                            break;
                        case DBTF_MEDIA:           //光盘
                            break;
                        }
                    }
                }
                break;
            case DBT_DEVICEREMOVECOMPLETE: //设备卸载或者拔出
                {
                    if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)    //逻辑卷
                    {
                        PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                        switch(lpdbv->dbcv_flags)
                        {
                        case 0:          //U盘
                            {
                                CString decDriver;
                                //char wParam;
                                //CString FirstDriveFromMask;
                                CString m_editControl;
                                decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask);                       //第一个驱动器来自掩码    //应用指针
                                detectMsg.Format(_T("检测到U盘:[%s]拔出!"),decDriver.GetBuffer(0));
                                m_editControl.setWindowText(detectMsg);
                            }
                            break;
                        case DBTF_MEDIA:           //光盘
                            break;
                        }
                    }
                }
                break;
            }
        }
        break;
    }
    return CDialog::WindowProc(message, wParam, lParam);
}

头文件如下:


// U_disk_detection_scanningDlg.h : 头文件
//

#pragma once


// CU_disk_detection_scanningDlg 对话框
class CU_disk_detection_scanningDlg : public CDialogEx


{
// 构造
public:
    CU_disk_detection_scanningDlg(CWnd* pParent = NULL);    // 标准构造函数
    LRESULT CU_disk_detection_scanningDlg::WindowProc(UINT message,WPARAM wparam,LPARAM lparam);
    //CString FirstDriveFromMask;
    //CString m_editControl;


// 对话框数据
    enum { IDD = IDD_U_DISK_DETECTION_SCANNING_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    //CEdit m_editControl;
// 实现
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 OnEnChangeEdit1();
    char FirstDriveFromMask(ULONG unitmask);
};

(3)报错信息
图片说明图片说明图片说明
(4)尝试过找回m_editControl在.h文件中的定义,但是没有跳转到.h文档中。

c++

1个回答

setWindowText,按理说应该大写 SetWindowText
不知道为什么小写,是不是代码作者自己定义了一个,但是代码不全

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复weixin_45447369: 你用的是atl,不是mfc
5 个月之前 回复
weixin_45447369
当年华褪去生涩 setWindowText,这个改成大写以后显示的错误和之前一样,提示SetWindowText不是“ATL::CStringT<BaseType,StringTraits>”的成员,我感觉应该不是这个大小写的问题,错误应该在它的定义这里,就在头文件中。
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
VC++ MFC getwindowtext(),使用提示的错误原因是什么
VC++ MFC getwindowtext(),使用提示的错误原因是什么 int num1,num2,num3; char ch1[12],ch2[12],ch3[12]; m_edit1.GetWindowText(ch1); //在ch1后面不标注长度,会提示出错,size 主要是什么作用 m_edit2.GetWindowText(ch2,12); num1=_ttoi(ch1); num2=_ttoi(ch2); num3=num1+num2; _itot(num3,ch3,10); m_edit3.SetWindowText(ch3); 错误提示: C:\Program Files (x86)\Microsoft Visual Studio\HD_RZG_CiTOS_4.5_EX\HD_RZG_CiTOS_4.5_EX\04_SRC\plan\project\test3\test3Dlg.cpp(270) : error C2664: 'void __thiscall CWnd::GetWindowTextA(class CString &) const' : cannot convert parameter 1 from 'char [ 12]' to 'class CString &
GetDlgItem(IDC)->SetWindowText(strsampletime)
GetDlgItem(IDC_TIMES)->SetWindowText(strsampletime)报错,错误如下: C:\Users\Administrator\Desktop\圆盘检测\StillCap\StillCapDlg.cpp(134) : error C2660: 'GetDlgItem' : function does not take 1 parameters C:\Users\Administrator\Desktop\圆盘检测\StillCap\StillCapDlg.cpp(134) : error C2227: left of '->SetWindowTextA' must point to class/struct/union 但是我重新建立一个工程,输入 GetDlgItem(IDC_TIMES)->SetWindowText(strsampletime);,不报错,成功了, 请问这是什么原因引起的?该如何解决?
求助!MFC ReadString()的问题
``` void RichEditView::ReadArticle(CString strName) { CString content = ""; CStdioFile File; CString fileName = strName; if (File.Open(fileName, CFile::modeRead | CFile::typeBinary)) { File.SeekToBegin(); CString str; File.ReadString(str); // A null character ('\0') is appended. while (File.ReadString(str)) { content += str; AfxMessageBox(str); } File.Close(); } else AfxMessageBox("读取失败!"); ::SetWindowText(this->GetRichEditCtrl().m_hWnd, content); } ``` 每次第一遍读取就是正常的,到第二遍读取就出问题了。 比如本来文本是"sssss",读取第一遍正常,第二遍就空白了,但是我打开文本看是 ![图片说明](https://img-ask.csdn.net/upload/201602/29/1456755852_900377.png) 这里说明一下,我这里读取是从第二行开始,第一行是另一个视图显示,这个函数究竟哪里出问题了?
MFC CStdioFile::ReadString()的问题
想一行行读取数据,并且我希望是从第二行开始读取,即第一行的跳过去。 于是我用了ReadString(),并且打开文件后先读取第一行,但是不保存第一行的数据,然后从第二行开始储存数据,代码如下: ``` void RichEditView::ReadArticle(CString strName) { CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); CString content = ""; CStdioFile File; CString fileName = strName; if (File.Open(fileName, CFile::modeRead | CFile::typeBinary)) { File.SeekToBegin(); CString str = ""; File.ReadString(str); // 读取第一行,不保存 while (File.ReadString(str)) //从第二行开始逐行读取 { content += str; AfxMessageBox(str); } File.Close(); } else AfxMessageBox("读取失败!"); ::SetWindowText(this->GetRichEditCtrl().m_hWnd, content); } ``` 运行正常的,正常读取出来,但是我读取完打开文件发现文本内容被改了。。 见图: ![图片说明](https://img-ask.csdn.net/upload/201603/01/1456809973_101716.png) 原本的数据 ![图片说明](https://img-ask.csdn.net/upload/201603/01/1456809999_692546.png) 读取并显示(第一行和第二行是两个视图在显示) ![图片说明](https://img-ask.csdn.net/upload/201603/01/1456810068_602680.png) 之后打开文本发现数据变了 ![图片说明](https://img-ask.csdn.net/upload/201603/01/1456810098_437737.png) 再次读取显示也出问题了 于是我把读取第一行的那个 ``` File.ReadString(str); // 读取第一行,不保存 ``` 语句注释掉,再重复上面的操作,一切正常,但是这显然不是我要的效果, 而且我发现貌似读取一次后,第二次读取显示的第一行是原来显示的第二行(即tttttt) 困惑很久了。究竟是哪里错了。。。
VC++MFC对话框付值,有值传过来,但就不显示
主对话框函数 if(b_RdSysID == 1) { KillTimer(1); b_RdSysID = 0; CColDatadlg *pDlg = (CColDatadlg*)AfxGetMainWnd(); pDlg ->ReadSysID(); } 当前对话框函数 void CColDatadlg::ReadSysID() { CString szStr,szTemp;//(RecBuf); CString *pPhoneNum =new CString((char*)RecBuf, 22); //将byte数组转换成cstring szStr = *pPhoneNum; szTemp = szStr.Right(19); szTemp = szStr.Right(19); MessageBox(szTemp);//此处szTemp有值显示 m_EditSysID = szTemp; //都是CString ,这里报错 // GetDlgItem(IDC_EditSystemID)->SetWindowText(szTemp);//试过没用 SetDlgItemText(IDC_EditSystemID,szTemp);//给EDIT值,EDIT仍没变化为空 UpdateData(false); }
visaual studio 2008 计算出错
请教下大家:我c++ 6.0中通过的代码,在visual 2008中无法通过,该当如何进行呢?谢谢! void CJisuanqiFormView::OnBnClickedBang() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); double Bang = m_strbang*0.4535924; float aa=(float)Bang; char cc[20]; sprintf(cc,"%.0f",aa); GetDlgItem(IDC_STATIC_BANG)->SetWindowText(cc); } io 2008\projects\xuglass\xuglass\jisuanqiformview.cpp(74) : error C2664: “CWnd::SetWindowTextW”: 不能将参数 1 从“char [20]”转换为“LPCTSTR” 1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换 1>生成日志保存在“file://d:\MyFile\Visual Studio 2008\Projects\XuGlass\XuGlass\Debug\BuildLog.htm” 1>XuGlass - 1 个错误,1 个警告 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
为什么子线程运行之后没有立刻执行?运行如下代码子线程永远不会执行。
``` void CMultiThread9Dlg::OnBnClickedWritew() { //创建子线程1 CWinThread *pWriteD=AfxBeginThread(WriteD, &m_ctrlD, THREAD_PRIORITY_HIGHEST, 0, 0); //创建子线程2 CWinThread *pWriteW=AfxBeginThread(WriteW, &m_ctrlW, THREAD_PRIORITY_HIGHEST, 0, 0); //如果去掉此循环,线程1,2可以正常运行,在编辑框里出现数字 //为什么要等待主线程执行之后才执行子线程。明明子线程优先级高于主线程。 //感谢您的关注。 while(1) { Sleep(100); } } ``` ``` UINT WriteW(LPVOID pParam) { CEdit *pEdit=(CEdit*)pParam; CString str; for(int i=0;i<10;i++) { str.Format(_T("%d"),i); pEdit->SetWindowText(str); Sleep(100); } eventWriteD.SetEvent(); return 0; } UINT WriteD(LPVOID pParam) { CEdit *pEdit=(CEdit*)pParam; WaitForSingleObject(eventWriteD,INFINITE); CString str; for(int i=0;i<10;i++) { str.Format(_T("%d"),i); pEdit->SetWindowText(str); Sleep(100); } return 0; } ```
继续求助:visula 2012 计算问题
求助:visual 2008编译通过,换成2012时又出错了啊, 代码如下: UpdateData(TRUE); // TODO: Add extra validation here /////////////////////////////////////////////////////////////// double bang = m_strbang*0.4535924; float aa=(float)bang; char cc[20]; sprintf(cc,"=%.0fKg",aa); GetDlgItem(IDC_MFCLINK3)->SetWindowText(cc); 1>d:\myfile\visual studio 2012\projects\xuglassform\xuglassform\jisuanformview.cpp(68): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\program files (x86)\microsoft visual studio 11.0\vc\include\stdio.h(357) : 参见“sprintf”的声明 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
在VC++2013版中使用itoa函数(被各种字符转换弄晕了)
void CTestDlg::OnClickedBtnAdd() { int num1, num2, num3; char ch1[10], ch2[10], ch3[10]; GetDlgItem(IDC_EDIT1)->GetWindowText(_T("ch1"), 10); GetDlgItem(IDC_EDIT1)->GetWindowText(_T("ch2"), 10); num1 = atoi(ch1); num2 = atoi(ch2); num3 = num1 + num2; _itoa_s(num3, ch3, 10); GetDlgItem(IDC_EDIT3)->SetWindowText(_T("ch3")); } 按照这个编辑,最后出现的Number3 中的值为2,但是显示的是ch3 ![图片说明](https://img-ask.csdn.net/upload/201512/07/1449495554_596265.png) 开始用 itoa(num3,_T( "ch3"), 10); _就报错了error C2664: “char *itoa(int,char *,int)”: 无法将参数 2 从“const wchar_t [4]”转换为“char *” 我改变那个字符集,又会有新的其他错误出来。 哎,小白求解答,有没有推荐的文章将这些啥啥间的转换的,已经晕了
vs2010里,无法解析的外部符号 protected: void __thiscall
按论坛的教程编程串口,错误提示: yyyzzzDlg.obj : error LNK2001: 无法解析的外部符号 "protected: void __thiscall CyyyzzzDlg::OnStnClickedStatic4(void)" (?OnStnClickedStatic4@CyyyzzzDlg@@IAEXXZ) c:\users\yz980\documents\visual studio 2010\Projects\yyyzzz\Debug\yyyzzz.exe : fatal error LNK1120: 1 个无法解析的外部命令 程序: // yyyzzzDlg.cpp : 实现文件 // #include "stdafx.h" #include "yyyzzz.h" #include "yyyzzzDlg.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() // CyyyzzzDlg 对话框 CyyyzzzDlg::CyyyzzzDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CyyyzzzDlg::IDD, pParent) , m_EditReceive(_T("")) , m_EditSend(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CyyyzzzDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_EditReceive); DDX_Text(pDX, IDC_EDIT2, m_EditSend); DDX_Control(pDX, IDC_COMBO1, m_comb1); DDX_Control(pDX, IDC_COMBO2, m_cob2); DDX_Control(pDX, IDC_MSCOMM1, m_mscom); } BEGIN_MESSAGE_MAP(CyyyzzzDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CyyyzzzDlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_SEND, &CyyyzzzDlg::OnBnClickedButtonSend) ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CyyyzzzDlg::OnBnClickedButtonClear) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CyyyzzzDlg::OnBnClickedButtonClose) ON_STN_CLICKED(IDC_STATIC4, &CyyyzzzDlg::OnStnClickedStatic4) END_MESSAGE_MAP() // CyyyzzzDlg 消息处理程序 BOOL CyyyzzzDlg::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: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for(i = 0; i < 15; i++) { str.Format(_T("COM %d"), i+1); m_comb1.InsertString(i, str); //将COM 1-15填入comb1 } m_comb1.SetCurSel(0); //预置为COM 1 //波特率选择组合框 CString str1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"), _T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")}; for(i = 0; i < 12; i++) { int judge_tf = m_cob2.AddString(str1[i]); if((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("Build baud error!")); } m_cob2.SetCurSel(5); //预置波特率为9600 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CyyyzzzDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CyyyzzzDlg::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 CyyyzzzDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CyyyzzzDlg::OnBnClickedButtonOpen() { CString str, str1, n; GetDlgItemText(IDC_BUTTON_OPEN, str); //str获得与对话框中的控件相关的标题或文本 CWnd *h1; //窗口类的基类 h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption //串口为关闭状态 if(!m_mscom.get_PortOpen()) { m_cob2.GetLBText(m_cob2.GetCurSel(), str1); //取得所选的字符串,并存放在str1里面 str1 = str1+','+'n'+','+'8'+','+'1'; m_mscom.put_CommPort(m_comb1.GetCurSel()+1); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //comb2选择的波特率,无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 //打开成功 if(m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); //把控件中的值和变量进行交换 h1->SetWindowText(str); //改变按钮名称为‘’关闭串口”,提供关闭操作 } } //串口为打开状态 else { m_mscom.put_PortOpen(false); //关闭串口 //关闭成功 if(str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //更新数据后,提供打开操作 } } } void CyyyzzzDlg::OnBnClickedButtonSend() { UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_EditSend));//把发送编辑框的数据发送出去 } void CyyyzzzDlg::OnBnClickedButtonClear() { m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //根据数据状态反馈给控件 } void CyyyzzzDlg::OnBnClickedButtonClose() { //若当前串口为打开 if(m_mscom.get_PortOpen()) m_mscom.put_PortOpen(false); //置为关闭 CDialogEx::OnCancel(); } BEGIN_EVENTSINK_MAP(CyyyzzzDlg, CDialogEx) ON_EVENT(CyyyzzzDlg, IDC_MSCOMM1, 1, CyyyzzzDlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CyyyzzzDlg::OnCommMscomm1() { //接收缓冲区有数据 if(m_mscom.get_CommEvent() == 2) { char str[1024] = {0}; //缓冲区最大为1024 long k; VARIANT InputData = m_mscom.get_Input(); //读入缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变À量转换为COleSafeArray型变量 for(k = 0; (size_t)k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str+k); //转换为BYTE型数组 } m_EditReceive += str; //接收到编辑框里面 //SetTimer(1, 10, NULL); //延时10ms UpdateData(false); //将数据在屏幕中对应控件中显示出来。 } }
MFC 读取文本内容的问题
``` void EditView::ReadTitle(CString strName) { CString content=""; CStdioFile file; CString fileName = strName; if (file.Open(fileName, CFile::modeRead | CFile::typeText)) { file.SeekToBegin(); CString str; int len = 512 - 2; file.ReadString(str); // A null character ('\0') is appended. if ("" != str) content += str; file.Close(); } else AfxMessageBox("读取失败!"); this->SetWindowText(content); } ``` strName是路径,调试是正确的,而且file.Open()也成功了。 就是读取内容ReadString(str)时,str显示字符串中的字符无效。 不知是哪里的问题。。
c#调用c++的DLL方法,提示“出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
是个IC读卡器读卡号的c++的demo,下面粘贴代码: ``` void CCTabOpration::OnRead() { CString strSer = pReader->GetCardStrSerial(); OutputDebugString(strSer); //pMem->SetWindowText("\n"+strSer); } CString CAceReader::GetCardStrSerial() { CString strre; BYTE buf[10]; BYTE snr[16]; GET_SNR(hComm, DeviceAddress, 0x26, 0x00, snr,buf); strre.Format("%02x%02x%02x%02x",buf[0],buf[1],buf[2],buf[3]); return strre; } ``` 然后粘贴我写道c#端的代码,先写了个类,然后点击按钮调用该方法: ``` class Class1 { [DllImport("mi.dll", EntryPoint = "GET_SNR", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] public static extern int GET_SNR(IntPtr commHandle, int DeviceAddress, byte mode, byte RDM_halt, byte[] snr, byte[] value); } 按钮方法: private void button1_Click(object sender, EventArgs e) { IntPtr hComm = IntPtr.Zero; byte[] a = new byte[128]; byte[] b = new byte[16]; byte aa = 0x26; byte bb = 0x00; Class1.GET_SNR(hComm, 0, aa, bb, b, a); //GET_SNR方法的前两个参数的值是在c++中打断点知道的前俩参数都是0 Console.WriteLine(a[1]); } ``` 然后就报错了,就是调方法的那一行,错误日志: 未处理System.AccessViolationException _HResult=-2147467261 _message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 HResult=-2147467261 IsTransient=false Message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 Source=WindowsFormsApplication14 StackTrace: 在 WindowsFormsApplication14.Class1.GET_SNR(IntPtr commHandle, Int32 DeviceAddress, Byte mode, Byte RDM_halt, Byte[] snr, Byte[] value) 在 WindowsFormsApplication14.Form1.button1_Click(Object sender, EventArgs e) 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Form1.cs:行号 28 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 WindowsFormsApplication14.Program.Main() 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Program.cs:行号 19 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:
C++代码转化为C#代码 求高手指点,写出注释谢谢啊
// scDlg.cpp : 实现文件 // #include "stdafx.h" #include "sc.h" #include "scDlg.h" #include ".\scdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 // CscDlg 对话框 CscDlg::CscDlg(CWnd* pParent /*=NULL*/) : CDialog(CscDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_strXin="a!dAA1$%^&IKMJNSD98574PO"; m_llNumber1=13693; m_llNumber2=113; } void CscDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO1, m_GameNumber); CString strTitle; strTitle.Format("数字3趣味游戏上分码计算"); SetWindowText(strTitle); ((CEdit*)GetDlgItem(IDC_EDIT_RANDOM))->SetLimitText(15); ((CEdit*)GetDlgItem(IDC_EDIT_ADDSCORE))->SetLimitText(7); ((CEdit*)GetDlgItem(IDC_EDIT_ADDGAME))->SetLimitText(5); } BEGIN_MESSAGE_MAP(CscDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1) END_MESSAGE_MAP() // CscDlg 消息处理程序 BOOL CscDlg::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); // 设置小图标 InitGameName(); CFont * Font; Font = new CFont; Font->CreateFont( 16, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_BOLD, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut DEFAULT_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH|FF_SWISS, // nPitchAndFamily "黑体"); GetDlgItem(IDC_COMBO1)->SetFont(Font); GetDlgItem(IDC_EDIT_RANDOM)->SetFont(Font); GetDlgItem(IDC_EDIT_ADDSCORE)->SetFont(Font); GetDlgItem(IDC_EDIT_ADDGAME)->SetFont(Font); GetDlgItem(IDC_EDIT_ADDNUMBER)->SetFont(Font); return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } void CscDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { /*CAboutDlg dlgAbout; dlgAbout.DoModal();*/ } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CscDlg::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 CscDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CscDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //OnOK(); if(!Validation()) { return; } ShowSYInfo(); GetNumber(); } void CscDlg::GetNumber() { GetDlgItemText(IDC_EDIT_RANDOM,m_strRandom); GetDlgItemText(IDC_EDIT_ADDSCORE,m_strAddscore); GetDlgItemText(IDC_EDIT_ADDGAME,m_strGame); GetDlgItemText(IDC_EDIT_ADDNUMBER,m_strAddNumber); if(m_strRandom=="") { AfxMessageBox("随机码不能为空"); return; } //1上分,2加场 //DMD5(MD5(分+随)+K,10)+DMD5(MD5(局+随)+K,10),后第4位是type,奇为上分,2为加场,0为两个都加 CString strKey=m_strArea+m_strXin; LONGLONG llAddScore=_atoi64(m_strAddscore); LONGLONG llAddGame=_atoi64(m_strGame); if(llAddScore%100!=0) { AfxMessageBox("请输入100的倍数"); return; } if(llAddScore==0&&llAddGame==0) { AfxMessageBox("分数和局数不能全为0"); return; } if(llAddScore>5000000) { AfxMessageBox("分数不能超过5000000"); return; } if(llAddGame>50000) { AfxMessageBox("场数不能超过50000"); return; } if(m_strRandom.GetLength()!=15) { AfxMessageBox("请输入15位的随机码"); return; } LONGLONG llRandom=_atoi64(m_strRandom); CString str1,str2,str3,str4,strTotal; str1.Format("%015I64u",llRandom+llAddScore); str1=MD5(str1)+strKey; str1=DigitalMD5(str1,10); str2.Format("%015I64u",llRandom+llAddGame); str2=MD5(str2)+strKey; str2=DigitalMD5(str2,10); if(llAddScore>0&&llAddGame<=0) { CString strT; str2=str2.Left(6)+"1"+str2.Right(3); } else if(llAddScore<=0&&llAddGame>0) { CString strT; str2=str2.Left(6)+"2"+str2.Right(3); } else { str2=str2.Left(6)+"0"+str2.Right(3); } m_strAddNumber=str1+str2; SetDlgItemText(IDC_EDIT_ADDNUMBER,m_strAddNumber); //UpdateWindow(); } CString CscDlg::MD5(CString str) { TCHAR sz[33]; CString strmd5; CMD5Encrypt::EncryptData(str,sz); strmd5=sz; return strmd5; } CString CscDlg::DigitalMD5(CString str,int Right) { CString strNumber; CString strMD5=MD5(str); static CRegexpT <char> regexp("[:^digit:]"); char *a=regexp.Replace(strMD5,""); strNumber=a; regexp.ReleaseString(a); if(Right!=0) { Right=min(strNumber.GetLength(),Right); strNumber=strNumber.Right(Right); LONGLONG llNumber=_atoi64(strNumber); strNumber.Format("%010I64u",llNumber); if(strNumber.GetLength()>Right) { strNumber.Right(Right); } } return strNumber; } void CscDlg::Search(CStringArray& dest) { dest.RemoveAll(); SHFILEINFO sfi; CFileFind* fileFind=new CFileFind(); BOOL res = fileFind->FindFile("*.liu"); int i=0; while(res) { res = fileFind->FindNextFile(); if(fileFind->IsDirectory()) { continue; } SHGetFileInfo(fileFind->GetFilePath(),0,&sfi,sizeof(sfi),SHGFI_ICON); dest.Add(fileFind->GetFileTitle()); i++; } } void CscDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 if(OpenClipboard())//打开剪切板 { EmptyClipboard();//清空剪切板,让当前窗口进程拥有剪切板 CString Str; GetDlgItemText(IDC_EDIT_ADDNUMBER,Str);//获取数据 HANDLE hClip; hClip=GlobalAlloc(GMEM_MOVEABLE,Str.GetLength()+1);//分配内存对象返回地址(该函数是系统从全局堆中分配内存) char *pBuf; pBuf=(char *)GlobalLock(hClip);//锁定全局内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处 strcpy(pBuf,Str);//将Str对象中的数据Copy到内存空间中 GlobalUnlock(hClip);//解锁全局内存块 SetClipboardData(CF_TEXT,hClip);//设置剪贴板数据 CloseClipboard();//关闭 } } void CscDlg::InitGameName() { Search(m_strArrFileName); int nCount=m_strArrFileName.GetCount(); for(int i=0;i<nCount;i++) { m_GameNumber.AddString(_T(m_strArrFileName.GetAt(i))); } m_GameNumber.SetCurSel(0); int nIndex=m_GameNumber.GetCurSel(); m_strArea=m_strArrFileName.GetAt(nIndex); CString strFile=m_strArea+".liu"; OnOpenDocument(strFile); } void CscDlg::OnCbnSelchangeCombo1() { // TODO: 在此添加控件通知处理程序代码 int nIndex=m_GameNumber.GetCurSel(); m_strArea=m_strArrFileName.GetAt(nIndex); CString strFile=m_strArea+".liu"; OnOpenDocument(strFile); } BOOL CscDlg::OnOpenDocument(CString strFileName) { CStdioFile file; CString filePathName; int row; CString result; CString strLine,strTemp; row = 0; file.Open(strFileName,CFile::modeRead); while(file.ReadString(strLine)) { char *str = strLine.GetBufferSetLength(strLine.GetLength()); char *p; if(strLine!="") { for (p=strtok(str,";");p!=NULL;p=strtok(NULL,";")) { strTemp = p; result+=strTemp; } row ++; } } m_MD5File=result; return TRUE; } BOOL CscDlg::Validation() { //DMD5(MD5(机器号+AB)+m_strXin,10)+DMD5(m_strXin+机器号,10) CString strOK=DigitalMD5(MD5(m_strArea+"AB")+m_strXin,10)+DigitalMD5(m_strXin+m_strArea,10); //AfxMessageBox(strOK); if(strOK!=m_MD5File) { return FALSE; } else { return TRUE; } } BOOL CscDlg::ShowSYInfo() { CString strInfo; CString strRandom,strScore,strInnings; GetDlgItemText(IDC_EDIT_RANDOM,strRandom); strScore=(strRandom.Left(9)).Right(8); strInnings=(strRandom.Right(6)).Right(5); int nScoreWei=atoi((strRandom.Left(9)).Left(1)); int nInningsWei=atoi((strRandom.Right(6)).Left(1)); FLOAT fSYSocre=atof(strScore)/13.0f; FLOAT fSYInnings=atof(strInnings)/7.0f; if(((int)(fSYSocre*100)%100)!=0||((int)(fSYInnings*100)%100)!=0) { strInfo.Format("剩余分数:%d,剩余局数:%d",0,0); SetDlgItemText(IDC_STATIC_SY,strInfo); return FALSE; } int nSYSocre=atoi(strScore)/13-m_llNumber1; int nSYInnings=atoi(strInnings)/7-m_llNumber2; if(nSYSocre<0||nSYInnings<0) { strInfo.Format("剩余分数:%d,剩余局数:%d",0,0); SetDlgItemText(IDC_STATIC_SY,strInfo); return FALSE; } strInfo.Format("剩余分数:%d,剩余局数:%d",nSYSocre,nSYInnings); SetDlgItemText(IDC_STATIC_SY,strInfo); return TRUE; }
win32 sdk SetWindowText()怎么在编辑框中显示内容?
如下图,只能显示在标题栏上。怎么在图中灰色区域显示?getDlgItem()为什么返回0? ``` hWndDialogBox = CreateDialog((HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG), hWnd, (DLGPROC)DeleteItemProc); HWND hWnd = GetDlgItem(hWndDialogBox, IDD_DIALOG); CString Buff("hhh"); SetWindowText(hWndDialogBox, Buff); ShowWindow(hWndDialogBox, SW_SHOW); ``` ![图片说明](https://img-ask.csdn.net/upload/201702/27/1488192720_908359.jpg)
MFC 错误 LNK2001 无法解析的外部符号
// SerialTest3Dlg.h : 头文件 // #pragma once #include "afxwin.h" #include "mscomm2.h" #include "stdint.h" #include "stdafx.h" // CSerialTest3Dlg 对话框 class CSerialTest3Dlg : public CDialogEx { // 构造 public: CSerialTest3Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERIALTEST3_DIALOG }; #endif 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() private: CString m_EditReceive;//接收框 CString m_Editsend;//发送框 CComboBox m_comb1;//COM口下拉框 public: CComboBox m_comb2;//波特率下拉框 CMscomm2 m_mscom;//串口控件 afx_msg void OnBnClickedButtonOpen();//打开按钮 afx_msg void OnBnClickedButtonCleanup();//清楚按钮 afx_msg void OnBnClickedButtonClose();//关闭按钮 DECLARE_EVENTSINK_MAP() void OnCommMscomm1();//串口按钮(隐形) CEdit m_Edit; CString m_interpretingdata;//解析数据 afx_msg void OnBnClickedButton5();//发送按钮 }; typedef struct FPGA_INFO_REPORT { uint8_t bWorkMode; //当前工作模式0x00表示初始模式0x01表示扫频模式0x02表示闭环驱动和检测模式0x03表示开环驱动和检测模式0x04表示连续Q值计算模式 uint8_t bCheckMode; //当前检测类型0x01表示开环检测0x02表示闭环检测调试0x03表示闭环检测0x04表示正交校正模式 uint8_t bADMagTimes; //检测信号放大倍数 uint32_t dwSweepTime; //扫频完成时间,毫秒 float fSweepFreq; //扫频得到的谐振频率 float fSweepFreqAmpl; //扫频谐振频率对应的驱动反馈信号幅值 float fDriSignalFreq; //驱动信号频率 float fDriSignalAmpl; //驱动信号幅度 float fDriveFbAmpl; //驱动反馈信号幅度 float fDriveFbPhase; //驱动反馈信号相位 float fBalSignalAmpl; //力平衡信号幅度 float fBalSignalPhase; //力平衡信号相位 float fCheckSignalAmpl; //检测信号幅度 float fCheckSignalPhase; //检测信号相位 float fCheckSignalPalst; //角速度 }FPGA_INFO_REPORT1; // SerialTest3Dlg.cpp : 实现文件 // #include "stdafx.h" #include "SerialTest3.h" #include "SerialTest3Dlg.h" #include "afxdialogex.h" #include <stdlib.h> #include "parser.h" #include <string.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CSerialTest3Dlg 对话框 CSerialTest3Dlg::CSerialTest3Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_SERIALTEST3_DIALOG, pParent) , m_EditReceive(_T("")) , m_Editsend(_T("")) , m_interpretingdata(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSerialTest3Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_Rev, m_EditReceive); DDX_Text(pDX, IDC_EDIT_Tev, m_Editsend); DDX_Control(pDX, IDC_COMBO2, m_comb1); DDX_Control(pDX, IDC_COMBO3, m_comb2); DDX_Control(pDX, IDC_MSCOMM2, m_mscom); DDX_Control(pDX, IDC_EDIT_Rev, m_Edit); DDX_Text(pDX, IDC_EDIT16, m_interpretingdata); } BEGIN_MESSAGE_MAP(CSerialTest3Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CSerialTest3Dlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_CLEANUP, &CSerialTest3Dlg::OnBnClickedButtonCleanup) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSerialTest3Dlg::OnBnClickedButtonClose) //ON_BN_CLICKED(IDC_BUTTON1, &CSerialTest3Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON5, &CSerialTest3Dlg::OnBnClickedButton5) END_MESSAGE_MAP() // CSerialTest3Dlg 消息处理程序 BOOL CSerialTest3Dlg::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: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for (i = 0; i < 5; i++) { str.Format(_T("com %d"), i + 1); m_comb1.InsertString(i, str); } m_comb1.SetCurSel(0);//预置COM口 // 波特率选择组合框 CString str1[] = { _T("4800"),_T("9600"),_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200") }; for (int i = 0; i < 8; i++) { int judge_tf = m_comb2.AddString(str1[i]); if ((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("build baud error!")); } m_comb2.SetCurSel(7);//预置波特率为"115200" return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CSerialTest3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSerialTest3Dlg::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 CSerialTest3Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSerialTest3Dlg::OnBnClickedButtonOpen()//打开串口 按钮程序 { // TODO: 在此添加控件通知处理程序代码 CString str, str1, n; //定义字符串 GetDlgItemText(IDC_BUTTON_OPEN, str); CWnd *h1; h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption if (!m_mscom.get_PortOpen()) { m_comb2.GetLBText(m_comb2.GetCurSel(), str1);//取得所选的字符串,并存放在str1里面 str1 = str1 + ',' + 'n' + ',' + '8' + ',' + '1'; //这句话很关键 m_mscom.put_CommPort((m_comb1.GetCurSel() + 1)); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //波特率为(波特率组合框)无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 if (m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为“关闭串口” } } else { m_mscom.put_PortOpen(false); if (str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为打开串口 } } } void CSerialTest3Dlg::OnBnClickedButtonCleanup()//清除数据按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } void CSerialTest3Dlg::OnBnClickedButtonClose()//退出按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } BEGIN_EVENTSINK_MAP(CSerialTest3Dlg, CDialogEx) ON_EVENT(CSerialTest3Dlg, IDC_MSCOMM2, 1, CSerialTest3Dlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() //CString temp; void CSerialTest3Dlg::OnCommMscomm1()//串口控件(按钮) { // TODO: 在此处添加消息处理程序代码 if (m_mscom.get_CommEvent() == 2) { char str[2048] = { 0 }; long k; CString temp; VARIANT InputData = m_mscom.get_Input(); //读缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变量转换为COleSafeArray型变量 for (k = 0; k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str + k); //转换为BYTE型数组 temp.Format(L"%02X",(char*)(str + k));//输出显示16进制 m_EditReceive += temp; // 接收到数据显示在编辑框里面 } SetTimer(1,10,NULL); //延时10ms UpdateData(false); m_Edit.SetSel(-1, 1); this->SetDlgItemTextW(IDC_EDIT_Rev, m_EditReceive);//将接收框内容显示到最后位置 m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一行 FPGA_INFO_REPORT1 info; memcpy(&info, str, sizeof(str)); CString str2; str2.Format(L"当前工作模式:%c\n", info.bWorkMode, "当前检测类型:%c\n", info.bCheckMode, "检测信号放大倍数:%c\n", info.bADMagTimes, "扫频完成时间:%c\n", info.dwSweepTime, "扫频得到的谐振频率:%f\n", info.fSweepFreq, "扫频谐振频率对应的驱动反馈信号幅值:%f\n", info.fSweepFreqAmpl, "驱动信号频率:%f\n", info.fDriSignalFreq, "驱动信号幅度:%f\n", info.fDriSignalAmpl, "驱动反馈信号幅度:%f\n", info.fDriveFbAmpl, "力平衡信号幅度:%f\n", info.fBalSignalAmpl, "力平衡信号相位:%f\n", info.fBalSignalPhase, "检测信号幅度:%f\n", info.fCheckSignalAmpl, "检测信号相位:%f\n", info.fCheckSignalPhase, "角速度:%f\n", info.fCheckSignalPalst); m_interpretingdata =str2; } } void CSerialTest3Dlg::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去 } 以上代码报错 :错误 LNK2001 无法解析的外部符号 "public: virtual struct CRuntimeClass * __thiscall CMscomm2::GetRuntimeClass(void)const " (?GetRuntimeClass@CMscomm2@@UBEPAUCRuntimeClass@@XZ) SerialTest3 C:\Users\LFY\Desktop\SerialTest3\SerialTest3\SerialTest3Dlg.obj 1 是什么原因
VC++ MFC Static Text 赋值
有一个自定义的方法 ``` void OnEnter(long long nConfID, long long nTimeUTC, const char *szConfXml, int nResult) { if(nResult) { MessageBox(NULL, "会议创建失败","提示:", MB_OK ); return; } else { MessageBox(NULL, "会议创建成功","提示:", MB_OK ); CString ConfXml; ConfID=nConfID; ConfXml=szConfXml;; int index=ConfXml.Find(_T("subject")); int index1=ConfXml.Find (_T("syncdesktop")); confName=ConfXml.Mid(index+9,(index1-2)-(index+9)); HWND hwnd=::FindWindow(NULL,"Web_Demo1"); CStatic* sm=(CStatic*)::GetDlgItem(hwnd,IDC_STATICMemo); sm->SetWindowText(confName); } } ``` HWND hwnd=::FindWindow(NULL,"Web_Demo1"); 这句话提示错误:CXX0030 无法计算表达是的值 IDC_STATICMemo 给他赋值时提示错误请高手帮帮忙
C++龙格库塔法步长问题
关于用龙哥库塔法求微分方程的问题: 在程序里每次改变步长h,求得结果都会不一样比如取步长为0.2和0.5,计算结果就不一样,不知道是什么原因,请大神帮帮我,谢谢,我把那个微分方程以及代码附上: > 微分方程:dy/dx=y*y;0<=x<=1; y(0)=1; 代码: double f(double x, double y)定义函数f,用来求微分方程 { return y*y; } /////////////////////////// void CQweDlg::OnButton1() { // TODO: Add your control notification handler code here double xx[100][100],yy[100][100],k[100][100]; double h;步长 int i; char ch1[10]; GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10); h=atof(ch1); long double T; T=1/h;循环次数 xx[1][0]=0; yy[1][0]=1; for(i=0; i<=T;i++) { k[1][1]=f(xx[1][i],yy[1][i]); k[1][2]=f(xx[1][i]+h/2,yy[1][i]+h*k[1][1]/2); k[1][3]=f(xx[1][i]+h/2,yy[1][i]+h*k[1][2]/2); k[1][4]=f(xx[1][i]+h,yy[1][i]+h*k[1][3]); yy[1][i+1]=yy[1][i]+h*(k[1][1]+2*k[1][2]+2*k[1][3]+k[1][4])/6; xx[1][i+1]=xx[1][i]+h; CString str1,str2; str1.Format("%.20f",yy[1][1000]); str2.Format("%.2f",h); GetDlgItem(IDC_EDIT2)->SetWindowText(str1); } }
(MFC42D.DLL):0xC0000005:Access Violation
void CMyscanDlg::OnButton1Start() { // TODO: Add your control notification handler code here CString btnTxt,IP; UINT nSinglePort; BYTE f1,f2,f3,f4; TCHAR temp[10]="\0"; m_cProgress.SetPos(0); m_cResult.DeleteAllItems();//清空所有条目 POSITION p=m_pStatusList->GetHeadPosition(); while(p) { POSITION temp=p; DATA* pNode=(DATA*)m_pStatusList->GetNext(p); m_pStatusList->RemoveAt(temp); if (pNode)//pNode!=null delete pNode; } //判断IP是否为空 if(m_cIP.IsBlank()) { MessageBox("请输入主机IP地址"); return; } if(m_cIP.GetAddress(f1,f2,f3,f4)<4)//判断输入IP是否有误 { MessageBox("请输入有效的IP地址"); return; } IP=_itoa(f1,temp,10); IP+=_T('.'); IP+=_itoa(f2,temp,10); IP+=_T('.'); IP+=_itoa(f3,temp,10); IP+=_T('.'); IP+=_itoa(f4,temp,10); m_cBtnStop.EnableWindow();//停止按键默认允许 m_cBtnScan.EnableWindow(false);//扫描按键被禁止 if(m_bSinglePort) { CString port; m_cSinglePort.GetWindowText(port); //最大端口等于最小端口视为单个端口扫描 m_minPort=m_maxPort=nSinglePort=atoi(port); } else { CString port1,port2; m_cPortFrom.GetWindowText(port1); m_cPortTo.GetWindowText(port2); m_minPort=atoi(port1); m_maxPort=atoi(port2); //进度条 m_cProgress.SetRange32(0,m_maxPort-m_minPort+1); m_cProgress.SetStep(1); } if (m_maxPort<m_minPort) { MessageBox(_T("您输入的端口范围有误,请重新输入")); return; } UINT m_nMaxAttempts=GetDlgItemInt(IDC_EDIT_ATTEMPTS); for(m_nCounter=m_minPort;m_nCounter<=m_maxPort;m_nCounter++) { BOOL bIsOpen=false; UINT nAttempt=1; //尝试次数 while(nAttempt<=m_nMaxAttempts && !bIsOpen) { TCHAR temp[10]="\0"; CString str=_T("尝试连接端口:"); str+=itoa(m_nCounter,temp,10); str+=_T(", IP地址为="); str+=IP; str+=_T(", 尝试次数为="); str+=itoa(nAttempt,temp,10); CStatic* pStatic=(CStatic*)GetDlgItem(IDC_STATIC_STATUS); pStatic->SetWindowText(str);//(也有用这个函数的SetStatusBarText) str.Empty(); bIsOpen=TestConnection(IP,m_nCounter); if(bIsOpen) { DATA* pNode=new DATA; ASSERT(pNode); strcpy(pNode->IPAddress,IP.GetBuffer(IP.GetLength())); strcpy(pNode->port,_itoa(m_nCounter,temp,10)); pNode->bStatus=1; //打开 pNode->nAttempts=nAttempt; m_pStatusList->AddTail(pNode); } nAttempt++; } if (!bIsOpen) { DATA* pNode=new DATA; ASSERT(pNode); strcpy(pNode->IPAddress,IP.GetBuffer(IP.GetLength())); strcpy(pNode->port,_itoa(m_nCounter,temp,10)); pNode->bStatus=0; //关闭 pNode->nAttempts=nAttempt-1; m_pStatusList->AddTail(pNode); } MSG message; if (::PeekMessage(&message,NULL,0,0,PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } m_cProgress.StepIt(); } //设定状态栏 CStatic* pStatic=(CStatic*)GetDlgItem(IDC_STATIC_STATUS); pStatic->SetWindowText((CString)_T("当前扫描状态")); m_cBtnScan.EnableWindow(); m_cBtnStop.EnableWindow(false); //填充报表视图 UINT nIndex=0; POSITION pos=m_pStatusList->GetHeadPosition(); while(pos) { DATA* pNode=(DATA*)m_pStatusList->GetNext(pos); /*/////////////////////////////////////(自己尝试的另一种输出列表,无视无视) m_cResult.InsertItem(nIndex,NULL); m_cResult.SetItemText(nIndex,0,pNode->IPAddress); m_cResult.SetItemText(nIndex,1,pNode->port);*/ AddItem(nIndex,0,pNode->IPAddress,0); AddItem(nIndex,1,pNode->port,0); if (pNode->bStatus) { //m_cResult.SetItemText(nIndex,2,"开"); //m_cResult.SetItemText(nIndex,4,"get"); AddItem(nIndex,2,_T("开"),0); AddItem(nIndex,4,_T("⊙▽⊙"),0); } else { //m_cResult.SetItemText(nIndex,2,"关"); //m_cResult.SetItemText(nIndex,4,"no way"); AddItem(nIndex,2,_T("关"),0); AddItem(nIndex,4,_T("T T"),0); } //m_cResult.SetItemText(nIndex++,3,itoa(pNode->nAttempts,temp,10)); AddItem(nIndex++,3,_itoa(pNode->nAttempts,temp,10),0); } } ``` 网上应该很多这个代码,我运行这个代码之后就出现![图片说明](https://img-ask.csdn.net/upload/201501/02/1420206303_65279.jpg) list_s.cpp文件的171行 POSITION CStringList::AddTail(const CString& newElement) { ASSERT_VALID(this); CNode* pNewNode = NewNode(m_pNodeTail, NULL); pNewNode->data = newElement; if (m_pNodeTail != NULL) m_pNodeTail->pNext = pNewNode; else m_pNodeHead = pNewNode; m_pNodeTail = pNewNode; return (POSITION) pNewNode; } ``` 研究了下应该是 //增加一列标题栏字符 void CMyscanDlg::AddHeader(LPTSTR hdr) { if(m_pColumns) m_pColumns->AddTail(hdr); } 这个函数出问题了,但是不知道怎么改,就把添加标题栏的方式换了一种。 结果窗口出来了,但是开始扫描之后就显示已停止工作_(:3」∠)_ debug检查弹出的窗口显示unhandled exception in *.exe (MFC42D.DLL):0xC0000005:Access Violation 已经不知道怎么改的我,求大神指点
VC socket编程,数据接收问题
用VC socket编程时,用recv函数接收字符串数据,只能接收到前4个字符,多于4个字符的都是“烫”字乱码。这是什么问题?怎么解决? char cs[100]; case FD_READ: { CString num=""; //定义字符串,用于保存待显示字符 ::recv(s1,cs,strlen(cs),0); //接收来自客户端的字符串数据 GetDlgItem(IDC_TEXT)->GetWindowText(num); //获取消息显示框中原有的字符 num+="\r\n"; //添加换行符 num+=(LPTSTR)::inet_ntoa(add1.sin_addr); //将客户端IP换成字符串 num+=":\r\n"; //添加换行符 num+=(LPTSTR)cs; //将接收到的字符串添加到显示字符串 num+=":\r\n"; //添加换行符 GetDlgItem(IDC_TEXT)->SetWindowText(num); //将字符串显示到消息显示框 }
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问