这个程序0error 0warning,但是在执行的时候出现**dlg.exe已停止工作 1C

// GT3Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "GT3.h"
#include "GT3Dlg.h"

#include "GT400.H"

#ifdef DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE
_;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGT3Dlg dialog

CGT3Dlg::CGT3Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CGT3Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGT3Dlg)
m_Axis_One_Check = TRUE;
m_Axis_Two_Check = FALSE;
m_One_Jerk = 0.00000002;
m_One_MaxAcc = 0.004;
m_One_Pos = -20000;
m_One_Vel = 5;
m_Two_Jerk = 0.00000002;
m_Two_MaxTwo = 0.004;
m_Two_Pos = -20000;
m_Two_Vel = 5;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CGT3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGT3Dlg)
DDX_Check(pDX, IDC_AXIS_ONE_CHECK, m_Axis_One_Check);
DDX_Check(pDX, IDC_AXIS_TWO_CHECK, m_Axis_Two_Check);
DDX_Text(pDX, IDC_S_ONE_JERK, m_One_Jerk);
DDV_MinMaxDouble(pDX, m_One_Jerk, 0., 1.e-002);
DDX_Text(pDX, IDC_S_ONE_MAXACC, m_One_MaxAcc);
DDV_MinMaxDouble(pDX, m_One_MaxAcc, 0., 0.5);
DDX_Text(pDX, IDC_S_ONE_POS, m_One_Pos);
DDX_Text(pDX, IDC_S_ONE_VEL, m_One_Vel);
DDV_MinMaxDouble(pDX, m_One_Vel, 0., 50.);
DDX_Text(pDX, IDC_S_TWO_JERK, m_Two_Jerk);
DDV_MinMaxDouble(pDX, m_Two_Jerk, 0., 1.e-002);
DDX_Text(pDX, IDC_S_TWO_MAXACC, m_Two_MaxTwo);
DDV_MinMaxDouble(pDX, m_Two_MaxTwo, 0., 0.5);
DDX_Text(pDX, IDC_S_TWO_POS, m_Two_Pos);
DDX_Text(pDX, IDC_S_TWO_VEL, m_Two_Vel);
DDV_MinMaxDouble(pDX, m_Two_Vel, 0., 50.);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGT3Dlg, CDialog)
//{{AFX_MSG_MAP(CGT3Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_AXIS_OPEN, OnAxisOpen)
ON_BN_CLICKED(IDC_AXIS_SMOTION, OnAxisSmotion)
ON_BN_CLICKED(IDC_AXIS_STOP, OnAxisStop)
ON_BN_CLICKED(IDC_AXIS_CLOSE, OnAxisClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGT3Dlg message handlers

BOOL CGT3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
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);
    }
}

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(m_hIcon, FALSE);        // Set small icon

// TODO: Add extra initialization here

return TRUE;  // return TRUE  unless you set the focus to a control

}

void CGT3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CGT3Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Center icon in client rectangle
    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;

    // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
}
else
{
    CDialog::OnPaint();
}

}

// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CGT3Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CGT3Dlg::OnAxisOpen()
{
// TODO: Add your control notification handler code here

////运动卡初始化函数////////////////////////////////////////////
short rtn;
rtn=GT_Open();
if (rtn!=0)
{
MessageBox("打开运动控制器设备失败!\n 程序结束!","系统提示",MB_OK|MB_ICONERROR);
}
rtn=GT_Reset();
if (rtn!=0)
{
MessageBox("复位运动控制器失败!\n 程序结束!","系统提示",MB_OK|MB_ICONERROR);
}
rtn=GT_SetSmplTm(200); error(rtn);
for (int i=1;i<5;++i)
{
rtn=GT_Axis(i);
rtn=GT_SetIntrMsk(0);
}

////专用输入信号参数设置//////////////////////////////////////////
rtn=GT_LmtSns(0xff);
rtn=GT_EncSns(0);

////控制轴初始化函数//////////////////////////////////////////////
rtn=GT_Axis(1); error(rtn); //1号轴
rtn=GT_ClrSts(); error(rtn);
rtn = GT_CtrlMode(0); error(rtn); //设置为输出模拟量
rtn=GT_CloseLp(); error(rtn);
rtn = GT_SetKp(1); error(rtn);
rtn = GT_SetKi(0); error(rtn);
rtn = GT_SetKd(0); error(rtn);
rtn=GT_SetKvff(0); error(rtn);
rtn=GT_SetKaff(0); error(rtn);
rtn=GT_Update(); error(rtn);
rtn=GT_AxisOn(); error(rtn);

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
rtn=GT_Axis(2); error(rtn); //2号轴初始化
rtn=GT_ClrSts(); error(rtn);
rtn = GT_CtrlMode(0); error(rtn);
rtn=GT_CloseLp(); error(rtn);
rtn = GT_SetKp(1); error(rtn);
rtn = GT_SetKi(0); error(rtn);
rtn = GT_SetKd(0); error(rtn);
rtn=GT_SetKvff(0); error(rtn);
rtn=GT_SetKaff(0); error(rtn);
rtn=GT_Update(); error(rtn);
rtn=GT_AxisOn(); error(rtn);
}

void CGT3Dlg::OnAxisSmotion()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_Axis_One_Check&m_Axis_Two_Check)
{
short rtn;
UpdateData();
for(int i=1;i<3;i++)
{
rtn=GT_Axis(i);

rtn=GT_ZeroPos();

rtn=GT_Update();
}
rtn=GT_Axis(1); error(rtn);
rtn=GT_PrflS(); error(rtn);
rtn=GT_SetJerk(m_One_Jerk); error(rtn);
rtn=GT_SetMAcc(m_One_MaxAcc); error(rtn);
rtn=GT_SetVel(m_One_Vel); error(rtn);

    rtn=GT_SetPos(m_One_Pos);           error(rtn);
    rtn=GT_Axis(2);                 error(rtn);
    rtn=GT_PrflS();                 error(rtn);
    rtn=GT_SetJerk(m_Two_Jerk);     error(rtn);
    rtn=GT_SetMAcc(m_Two_MaxTwo);       error(rtn);
    rtn=GT_SetVel(m_Two_Vel);           error(rtn);

    rtn=GT_SetPos(m_Two_Pos);           error(rtn);     
    rtn=GT_MltiUpdt(0x3);               error(rtn);
}
else
{
    if (m_Axis_One_Check)
    {
        short rtn;
        UpdateData();
        for(int i=1;i<3;i++)
        {
            rtn=GT_Axis(i);         
            rtn=GT_ZeroPos();               
            rtn=GT_Update();
        }
        rtn=GT_Axis(1);                     error(rtn);
        rtn=GT_PrflS();                     error(rtn);
        rtn=GT_SetJerk(m_One_Jerk);         error(rtn);
        rtn=GT_SetMAcc(m_One_MaxAcc);       error(rtn);
        rtn=GT_SetVel(m_One_Vel);           error(rtn);         
        rtn=GT_SetPos(m_One_Pos);           error(rtn);         
        rtn=GT_Update();                error(rtn);
    }
    else 
    {
        if (m_Axis_Two_Check)
        {
            short rtn;
            UpdateData();
            for(int i=1;i<3;i++)
            {
                rtn=GT_Axis(i);         
                rtn=GT_ZeroPos();                   
                rtn=GT_Update();
            }
            rtn=GT_Axis(2);                 error(rtn);
            rtn=GT_PrflS();                 error(rtn);
            rtn=GT_SetJerk(m_Two_Jerk);     error(rtn);
            rtn=GT_SetMAcc(m_Two_MaxTwo);       error(rtn);
            rtn=GT_SetVel(m_Two_Vel);           error(rtn);

            rtn=GT_SetPos(m_Two_Pos);           error(rtn);
            rtn=GT_Update();                error(rtn);
        } 
        else
        {
            MessageBox("您一根轴都没有选择!","系统提示");
        }

    }
}

}

void CGT3Dlg::OnAxisStop()
{
// TODO: Add your control notification handler code here

short rtn;
if (m_Axis_One_Check&m_Axis_Two_Check)
{
    rtn=GT_Axis(1);         error(rtn);
    rtn=GT_SmthStp();       error(rtn);
    rtn=GT_Axis(2);         error(rtn);
    rtn=GT_SmthStp();       error(rtn);
    rtn=GT_MltiUpdt(0x3);   error(rtn);
}
else
{
    if (m_Axis_One_Check)
    {
        rtn=GT_Axis(1);         error(rtn);
        rtn=GT_SmthStp();       error(rtn);
        rtn=GT_Update();        error(rtn);         
    }
    else 
    {
        if (m_Axis_Two_Check)
        {
            rtn=GT_Axis(2);         error(rtn);
            rtn=GT_SmthStp();       error(rtn);
            rtn=GT_Update();        error(rtn);                 
        } 
        else
        {
            MessageBox("您一根轴都没有选择!","系统提示");
        }

    }
}

}

void CGT3Dlg::OnAxisClose()
{
// TODO: Add your control notification handler code here

short rtn;
for(int i=1;i<3;i++) 
{
    rtn=GT_Axis(i);             error(rtn);
    rtn=GT_AxisOff();           error(rtn);
}
rtn=GT_Close();                 error(rtn);

}

void CGT3Dlg::OnOK()
{
// TODO: Add extra validation here

if (MessageBox("确定已关闭控制器了吗?","系统提示",MB_YESNO|MB_ICONQUESTION)==IDYES)
{
    CDialog::OnOK();
}

}

void CGT3Dlg::error(short rtn)
{
switch (rtn)
{
case -1:
MessageBox("error:commuciation error!","系统提示",MB_ICONEXCLAMATION|MB_OK);
break;
case 0:
break;
case 1:
MessageBox("error:command error!","系统提示",MB_ICONEXCLAMATION|MB_OK);
break;
case 2:
case 3:
case 4:
case 5:
case 7:
MessageBox("error:parameter error!","系统提示",MB_ICONEXCLAMATION|MB_OK);
break;
case 6:
MessageBox("error:map error!","系统提示",MB_ICONEXCLAMATION|MB_OK);
default:
break;

}   

}

2个回答

这很正常,程序能编译不等于运行不出错
具体你应该调试程序。按f5而不是ctrl+f5启动程序,以调试模式运行,出错了会出现一个对话框,选择转到代码
然后找到发生错误的代码行,仔细调试,特别是指针的问题。

time1992
time1992 kernel32.dll,no matching symbolic information found调试以后是这样的,该怎么办,我不懂C++,能帮忙解释一下吗
4 年多之前 回复

出错的时候,直接用编译器调试跟踪一下,应该是你的代码有指针等没有处理好。导致程序异常了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
halcon与mfc混合编程中怎样在picture control中显示不同的图片?还有图片被halcon处理后,显示结束后,如何清空窗口。
使用halcon将图片读取,并显示在picture control上后再次读取第二张图片时仍然显示第一张图片 void Ct5Dlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CString path; CString filter; filter = "Picture Files (*.bmp *.jpg)|*bmp;;*jpg||"; CFileDialog readfileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter);//构造文件对话框对象 if (IDOK == readfileDlg.DoModal()) //当点击确定按钮时候,会记录文件路径 { path = readfileDlg.GetPathName(); } else { return; } //通过readfileDlg.GetPathName()获得的文件路径是CString类型,而Halcon中的read_image需要的类型为HTuple涉及到数据转换 CStringA StrTemp(path); hv_picfile = (LPSTR)StrTemp.GetBuffer(); ReadImage(&ho_Image, hv_picfile); //读取文件 HWND hwnd1; CRect rect; GetDlgItem(IDC_PIC)->GetWindowRect(&rect); //获取控件尺寸 hwnd1 = GetDlgItem(IDC_PIC)->m_hWnd; //HLONG lWWindowID=(HLONG)m_hWnd; LONG lWindowID = (LONG)hwnd1; OpenWindow(0, 0, rect.Width(), rect.Height(), lWindowID, "", "", &hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Image, HDevWindowStack::GetActive()); } ``` ```
MFC listcontrol report样式存取一行数据并计算。
目的:使用MFC listcontrol report样式存取一行数据,并用这一行数据按照一个公式进行计算。 我的问题:输入不同数据后,调用后发现结构体数组里的值都一样。 第三MessageBox(damage[0].ZheSheLv); MessageBox(damage[0].HouDu); 这两个值总显示一样的,问什么?????? 操作: 1.在头文件里,建立了一个结构体,全局声明结构体数组,; typedef struct damagePos { CString MianShu; CString BanJing; CString ZheSheLv; CString HouDu; }; static damagePos damage[50]; 2.对话框初始化 DWORD dwStyle=m_store_items.GetExtendedStyle(); dwStyle|=LVS_EX_FULLROWSELECT; dwStyle|=LVS_EX_GRIDLINES; m_store_items.SetExtendedStyle(dwStyle); m_store_items.InsertColumn(0,"光学面数",LVCFMT_LEFT,80); m_store_items.InsertColumn(1, _T("半径"), LVCFMT_CENTER,100); m_store_items.InsertColumn(2, _T("折射率"), LVCFMT_CENTER,100); m_store_items.InsertColumn(3, _T("厚度"), LVCFMT_CENTER,100); m_edit_pos.ShowWindow(SW_HIDE); 2.添加edit控件,离焦事件函数,存取输入的数据 void CMy3Dlg::OnKillfocusEdit1() { // TODO: Add your control notification handler code here CString str0; m_edit_pos.GetWindowTextA((LPTSTR)(LPCTSTR)str0,-1);//获取输入框中的数据 m_store_items.SetItemText(m_ListRow,m_ListCol,str0);//设置选中框的字符为刚刚输入的值 //将输入的数据传递给结构体数组 //damagePos damage[50] if(m_ListCol%3==0) { MessageBox("输入厚度"); MessageBox(str0); damage[m_ListRow].HouDu=str0; } else if(m_ListCol%2==0) { MessageBox("输入折射率"); MessageBox(str0); //strcpy(damage[m_ListRow].ZheSheLv,str0); damage[m_ListRow].ZheSheLv=str0; //MessageBox(damage[m_ListRow].ZheSheLv); } else { MessageBox("进入输入半径"); MessageBox(str0); damage[m_ListRow].BanJing="半径"; } 3.建立button控件,添加事件,目的使用上面的结构体数组中的数据完成计算。 MessageBox(damage[0].ZheSheLv); MessageBox(damage[0].HouDu); return; double num1,num2,num3,num4,num5; CString str1; char ch5[10]; str1=itoa(m_ListRow,ch5,10); MessageBox(str1); MessageBox(damage[m_ListRow].ZheSheLv); CString str2; char ch6[10]; str2=itoa(m_ListRow,ch6,10); MessageBox(damage[m_ListRow].HouDu); CString str3; char ch7[10]; str3=itoa(m_ListRow,ch7,10); MessageBox(damage[m_ListRow].BanJing); return; // TODO: Add your control notification handler code here for(int i=0;i<m_ListRow+1;i++) { if(m_ListRow==0) { // MessageBox("niaho"); num1=10 /atof(damage[m_ListRow].BanJing); num2=num1*(1/atof(damage[m_ListRow].HouDu)) ; num3=num1-num2; num4=atof(damage[m_ListRow].BanJing)+atof(damage[m_ListRow].BanJing)*num2/num3; num5=num4-atof(damage[m_ListRow].HouDu); CString str; char ch4[10]; str=gcvt(num2,8,ch4); MessageBox(str); }}
为什么子线程运行之后没有立刻执行?运行如下代码子线程永远不会执行。
``` 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; } ```
基于MFC做的音乐播放器,新手,不知道问什么调试了没有声音
void Load(HWND hWnd, CString strFilepath)//将文件路径传输给MCI_OPEN_PAPMS { m_hWnd = hWnd; mciSendCommand(DeviceId, MCI_CLOSE, 0, 0); //在加载文件前先清空上一次播放的设备 mciopenparms.lpstrElementName = strFilepath; //将音乐文件路径传给设备 DWORD dwReturn; if (dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD)(LPVOID)&mciopenparms)) { //如果打开玩家失败,将出错信息储存在buffer,并显示出错警告 //char buffer[256]; //获取错误码对应的错误信息 //弹出错误信息提示对话框 } DeviceId = mciopenparms.wDeviceID; //打开文件成功就关联文件到设备 } void Cmfc_music_playerDlg::OnBnClickedfilechoice() { // TODO: 在此添加控件通知处理程序代码 char szFileFilter[] = "mp3文件(*.mp3)|*.mp3|" "wma文件(*.wma)|*.wma|" "wav文件(*.wav)|*.wav|" "所有文件(*.*)|*.*|";//文件类型 CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY, szFileFilter); if (dlg.DoModal() == IDOK) { CString strFilepath = dlg.GetPathName();//返回文件路径 CString strFilename = dlg.GetFileName();//返回文件名 SetDlgItemText(IDC_filename, strFilename); Load(this->m_hWnd, strFilepath); } GetDlgItem(IDC_play)->EnableWindow(true); //文件读取成功时所有按钮变成可选 GetDlgItem(IDC_pause)->EnableWindow(true);//控制按钮的显示 GetDlgItem(IDC_stop)->EnableWindow(true); } //播放 void play() { MCI_PLAY_PARMS mciplayparms; mciplayparms.dwCallback = (DWORD)m_hWnd; mciplayparms.dwFrom = 0; //每次播放都是从0开始播放 mciSendCommand(DeviceId, MCI_PLAY, MCI_FROM | MCI_NOTIFY, (DWORD)(LPVOID)&mciplayparms); } //暂停 void pause() { mciSendCommand(DeviceId, MCI_PAUSE, 0, 0); } //恢复 void resume() { mciSendCommand(DeviceId, MCI_RESUME, 0, 0); } //停止 void stop() { mciSendCommand(DeviceId, MCI_STOP, 0, 0);//当点击停止按钮时,将所有的信息都清除掉 mciSendCommand(DeviceId, MCI_CLOSE, 0, 0);//点关闭按钮的时候,清除设备信息,再点播放按钮,就播放不了音乐了 //当点击停止按钮时,将所有的信息都清除掉 } //设置音量 DWORD setVolume(DWORD vol) { MCI_DGV_SETAUDIO_PARMS setvolume; //设置音量的参数结构体 setvolume.dwCallback = NULL; // setvolume.dwItem = MCI_DGV_SETAUDIO_VOLUME; //动作是设置音量 setvolume.dwValue = vol; //音量值是vol mciSendCommand(DeviceId, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD)(LPVOID)&setvolume); return 0; } 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() // Cmfc_music_playerDlg 对话框 Cmfc_music_playerDlg::Cmfc_music_playerDlg(CWnd* pParent /*=NULL*/) : CDialogEx(Cmfc_music_playerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_int = 0; } void Cmfc_music_playerDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_SLIDER1, m_slider); // DDX_Slider(pDX, IDC_SLIDER1, m_int); DDX_Text(pDX, IDC_vol, m_int); } BEGIN_MESSAGE_MAP(Cmfc_music_playerDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_CHANGE(IDC_filename, &Cmfc_music_playerDlg::OnChangeFilename) ON_BN_CLICKED(IDC_pause, &Cmfc_music_playerDlg::OnClickedPause) ON_BN_CLICKED(IDC_play, &Cmfc_music_playerDlg::OnClickedPlay) ON_BN_CLICKED(IDC_stop, &Cmfc_music_playerDlg::OnClickedStop) ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &Cmfc_music_playerDlg::OnCustomdrawSlider) ON_BN_CLICKED(IDC_filechoice, &Cmfc_music_playerDlg::OnBnClickedfilechoice) ON_EN_CHANGE(IDC_vol, &Cmfc_music_playerDlg::OnEnChangevol) ON_BN_CLICKED(IDC_exitbt, &Cmfc_music_playerDlg::OnBnClickedexitbt) END_MESSAGE_MAP() // Cmfc_music_playerDlg 消息处理程序 BOOL Cmfc_music_playerDlg::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); // 设置小图标 m_slider.SetRange(0, 1000); //滑动条的移动范围 0~1000 m_slider.SetPos(500); //滑动条的指针处置位置为500,代表初试音量为500 GetDlgItem(IDC_play)->EnableWindow(false); //文件没有读取时所有按钮不可选 GetDlgItem(IDC_pause)->EnableWindow(false); GetDlgItem(IDC_stop)->EnableWindow(false); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void Cmfc_music_playerDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void Cmfc_music_playerDlg::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 Cmfc_music_playerDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void Cmfc_music_playerDlg::OnChangeFilename() { /** TODO: 如果该控件是 RICHEDIT 控件,它将不 发送此通知,除非重写 CDialogEx::OnInitDialog() 函数并调用 CRichEditCtrl().SetEventMask(), 同时将 ENM_CHANGE 标志“或”运算到掩码中。 TODO: 在此添加控件通知处理程序代码*/ } //播放按钮 void Cmfc_music_playerDlg::OnClickedPlay() { // TODO: 在此添加控件通知处理程序代码 play(); SetDlgItemText(IDC_pause, "暂停"); } //暂停和恢复按钮 void Cmfc_music_playerDlg::OnClickedPause() { // TODO: 在此添加控件通知处理程序代码 CString strTemp; GetDlgItemText(IDC_pause, strTemp); //获取按钮的状态 if (strTemp.Compare("暂停") == 0) { pause(); SetDlgItemText(IDC_pause,"恢复"); } if (strTemp.Compare("恢复") == 0) { resume(); SetDlgItemText(IDC_pause, "暂停"); } } //停止按钮 void Cmfc_music_playerDlg::OnClickedStop() { // TODO: 在此添加控件通知处理程序代码 stop(); SetDlgItemText(IDC_pause, "暂停"); } //GetDlgItem(IDC_play)->EnableWindow(false); //当按下stop的时候,播放和暂停不可选 //GetDlgItem(IDC_pause)->EnableWindow(false); void Cmfc_music_playerDlg::OnCustomdrawSlider(NMHDR *pNMHDR, LRESULT *pResult) { UpdateData(true); m_int = m_slider.GetPos() / 10; setVolume(m_slider.GetPos()); UpdateData(false); //LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; } void Cmfc_music_playerDlg::OnEnChangevol() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 } void Cmfc_music_playerDlg::OnBnClickedexitbt() { // TODO: 在此添加控件通知处理程序代码 CDialog::OnCancel(); //退出 } HRESULT Cmfc_music_playerDlg::accDoDefaultAction(VARIANT varChild) { // TODO: 在此添加专用代码和/或调用基类 return CDialogEx::accDoDefaultAction(varChild); } ```
新手MFC求助,关于error LNK2019的问题。
1>MFCApplication2Dlg.obj : error LNK2019: 无法解析的外部符号 "public: static long __stdcall CMFCApplication2Dlg::JournalRecordProc(int,unsigned int,long)" (?JournalRecordProc@CMFCApplication2Dlg@@SGJHIJ@Z),该符号在函数 "public: void __thiscall CMFCApplication2Dlg::OnBnClickedButton3(void)" (?OnBnClickedButton3@CMFCApplication2Dlg@@QAEXXZ) 中被引用 1>MFCApplication2Dlg.obj : error LNK2019: 无法解析的外部符号 "public: static long __stdcall CMFCApplication2Dlg::JounralPlaybackProc(int,unsigned int,long)" (?JounralPlaybackProc@CMFCApplication2Dlg@@SGJHIJ@Z),该符号在函数 "public: void __thiscall CMFCApplication2Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMFCApplication2Dlg@@QAEXXZ) 中被引用 1>E:\PJB\MFCApplication2\Debug\MFCApplication2.exe : fatal error LNK1120: 2 个无法解析的外部命令 void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } static LRESULT CALLBACK 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; } } static LRESULT CALLBACK JournalPlaybackProc(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; } 请问下哪有错啊,很急
VC++6.0 MFC创建新的dialog报错
在创建完成新的class(默认)后给主界面加入头文件后编译报错: error C2143: syntax error : missing ';' before 'constant' fatal error C1004: unexpected end of file found 部分具体代码: 主界面: 主界面头: #include "stdafx.h" #include "Happygame.h" #include "HappygameDlg.h" #include "DLG.h" ……按钮部分代码: void CHappygameDlg::OnOK() { // TODO: Add extra validation here DLG dlg; dlg.DoModal(); CDialog::OnOK(); } 新dialog部分代码: #if !defined(AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_) #define AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // DLG.h : header file // ///////////////////////////////////////////////////////////////////////////// // DLG dialog class DLG : public CDialog (此处是报错行!!!!!) { // Construction public: DLG(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(DLG) enum { IDD = IDD_DIALOG1 }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(DLG) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(DLG) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_) 其中新的dialog叫DLG 报错:error C2143: syntax error : missing ';' before 'constant' fatal error C1004: unexpected end of file found 小白大二做MFC求解谢谢大佬
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 &
VS2012编译不报错,但是单步调试的时候查看变量值,显示这个变量是未声明的标识符
void CGPRS2012Dlg::OnOncommMscomm1() { // TODO: 在此处添加消息处理程序代码 Sleep(300); VARIANT variant_inp; COleSafeArray safearray_inp; CString strtemp; long len,k; byte rxdata[1000]; for (int i=0;i<1000;i++) { rxdata[i]=0x00; } CString phone; CString str; CString imei; CString time; if (m_comm.get_CommEvent()==2) { variant_inp=m_comm.get_Input(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for (k=0;k<len;k++) { safearray_inp.GetElement(&k,rxdata+k); } } } 这是一个最简单的串口接收数据,但是len这个变量在调试的时候在监视窗口中显示为未声明的标识符然后我得不到len,而且for (k=0;k<len;k++) { safearray_inp.GetElement(&k,rxdata+k); } 只循环一次,但是能得到正确的rxdata,这是什么情况
使用VC调用别人用Delphi做的动态库访问冲突且无法加载请问是什么原因呢?
因为最近要做个PC与PLC通信的软件,因此在网上找到一个人用Delphi写的PLC通信dll库,应该是32位。我用VC2015写了个MFC要调用这个dll发现总是提示访问冲突,调用失败。因为有其他人是写图像处理的,环境必须要用VC 2015。但是和那个人联系他说其他人用了是没问题的,我因为是刚开始学这个软件,也没有dll源码,不知道问题出在哪。下面是我程序的源码,其他dll内函数声明我都还没用,只是用LoadlibraryA发现就已经失败了。**如果有朋友能在32位(64位更好)的C++ MFC环境下解决并调试成功的话,必有感谢。** 引用线内部分是我添加的,其他都是向导生成的。附件里面有调用的库。 ![图片说明](https://img-ask.csdn.net/upload/201911/21/1574305525_943286.png) dll地址:h1ttps://pan.baidu.com/s/1chKfBqmRsmDmvfMqt31RNg ``` // MFC-PLC21Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFC-PLC21.h" #include "MFC-PLC21Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif ///////////////////////////////////////////////////////////////// HINSTANCE hinstDLL; typedef int(_stdcall *pOpen)(int nport, int BaudRate, int DataBits, char* Parity, int StopBits, char* User); typedef int(_stdcall *pClose)(int nport); typedef int(_stdcall *pSetDelay)(int value); typedef int(_stdcall *pComTrue)(int nport); typedef int(_stdcall *pComWork)(int nport); typedef int(_stdcall *pReadBit)(int nport, int node, char* element, int address, int Bit); typedef int(_stdcall *pReadByte)(int nport, int node, char* element, int address, int Count, int* RxdBuffer); typedef int(_stdcall *pReadInt)(int nport, int node, char* element, int address, int Count, int* RxdBuffer); typedef int(_stdcall *pReadDInt)(int nport, int node, char* element, int address, int Count, int* RxdBuffer); typedef int(_stdcall *pReadFloat)(int nport, int node, char* element, int address, int Count, float* RxdBuffer); typedef int(_stdcall *pBitWrite)(int nport, int node, char* element, int address, int Bit, int value); typedef int(_stdcall *pBitEWrite)(int nport, int node, char* element, int address, int Bit, int value); typedef int(_stdcall *pEbitCancel)(int nport, int node, char* element, int address, int Bit); typedef int(_stdcall *pWriteByte)(int nport, int node, char* element, int address, int Count, int* TxdBuffer); typedef int(_stdcall *pWriteInt)(int nport, int node, char* element, int address, int Count, int* TxdBuffer); typedef int(_stdcall *pWriteDInt)(int nport, int node, char* element, int address, int Count, int* TxdBuffer); typedef int(_stdcall *pWriteFloat)(int nport, int node, char* element, int address, int Count, float* TxdBuffer); typedef int(_stdcall *pPlcRun)(int nport, int node); typedef int(_stdcall *pPlcStop)(int nport, int node); typedef int(_stdcall *pBitBin)(int value, int Bitaddress); typedef int(_stdcall *p16I_8h)(int value); typedef int(_stdcall *p16I_8l)(int value); typedef int(_stdcall *p8I_16I)(int valueH, int valueL); typedef int(_stdcall *p32I_16h)(int value); typedef int(_stdcall *p32I_16l)(int value); typedef int(_stdcall *p16I_32I)(int valueH, int valueL); typedef int(_stdcall *p32f_16h)(float value); typedef int(_stdcall *p32f_16l)(float value); typedef float(_stdcall *p16I_32f)(int valueH, int valueL); pOpen mOpen; pClose mClose; pSetDelay mSetDelay; pComTrue mComTrue; pComWork mComWork; pReadBit mReadBit; pReadByte mReadByte; pReadInt mReadInt; pReadDInt mReadDInt; pReadFloat mReadFloat; pBitWrite mBitWrite; pBitEWrite mBitEWrite; pEbitCancel mEbitCancel; pWriteByte mWriteByte; pWriteInt mWriteInt; pWriteDInt mWriteDInt; pWriteFloat mWriteFloat; pPlcRun mPlcRun; pPlcStop mPlcStop; pBitBin mBitBin; p16I_8h m16I_8h; p16I_8l m16I_8l; p8I_16I m8I_16I; p32I_16h m32I_16h; p32I_16l m32I_16l; p16I_32I m16I_32I; p32f_16h m32f_16h; p32f_16l m32f_16l; p16I_32f m16I_32f; /////////////////////////////////////////////////////////////// // 用于应用程序“关于”菜单项的 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() // CMFCPLC21Dlg 对话框 CMFCPLC21Dlg::CMFCPLC21Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_MFCPLC21_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCPLC21Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCPLC21Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(Test, &CMFCPLC21Dlg::OnBnClickedTest) END_MESSAGE_MAP() // CMFCPLC21Dlg 消息处理程序 BOOL CMFCPLC21Dlg::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 CMFCPLC21Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCPLC21Dlg::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 CMFCPLC21Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } ///////////////////////////////////////////////////////////////////// void CMFCPLC21Dlg::OnBnClickedTest() { // TODO: 在此添加控件通知处理程序代码 hinstDLL = LoadLibraryA("S7200_PPI.dll"); if (hinstDLL) { mOpen = (pOpen)GetProcAddress(hinstDLL, "S7200ComOpen"); mClose = (pClose)GetProcAddress(hinstDLL, "S7200ComClose"); mSetDelay = (pSetDelay)GetProcAddress(hinstDLL, "S7200SetDelay"); mComTrue = (pComTrue)GetProcAddress(hinstDLL, "S7200ComTrue"); mComWork = (pComWork)GetProcAddress(hinstDLL, "S7200ComWork"); mReadBit = (pReadBit)GetProcAddress(hinstDLL, "S7200BitRead"); mReadByte = (pReadByte)GetProcAddress(hinstDLL, "S7200ByteRead"); mReadInt = (pReadInt)GetProcAddress(hinstDLL, "S7200WordRead"); mReadDInt = (pReadDInt)GetProcAddress(hinstDLL, "S7200DwordRead"); mReadFloat = (pReadFloat)GetProcAddress(hinstDLL, "S7200FloatRead"); mBitWrite = (pBitWrite)GetProcAddress(hinstDLL, "S7200BitWrite"); mBitEWrite = (pBitEWrite)GetProcAddress(hinstDLL, "S7200BitEWrite"); mEbitCancel = (pEbitCancel)GetProcAddress(hinstDLL, "S7200EbitCancel"); mWriteByte = (pWriteByte)GetProcAddress(hinstDLL, "S7200ByteWrite"); mWriteInt = (pWriteInt)GetProcAddress(hinstDLL, "S7200WordWrite"); mWriteDInt = (pWriteDInt)GetProcAddress(hinstDLL, "S7200DwordWrite"); mWriteFloat = (pWriteFloat)GetProcAddress(hinstDLL, "S7200FloatWrite"); mPlcRun = (pPlcRun)GetProcAddress(hinstDLL, "S7200PlcRun"); mPlcStop = (pPlcStop)GetProcAddress(hinstDLL, "S7200PlcStop"); mBitBin = (pBitBin)GetProcAddress(hinstDLL, "DecBitBin"); m16I_8h = (p16I_8h)GetProcAddress(hinstDLL, "Int16ToInt_8h"); m16I_8l = (p16I_8l)GetProcAddress(hinstDLL, "Int16ToInt_8l"); m8I_16I = (p8I_16I)GetProcAddress(hinstDLL, "Int8ToInt16"); m32I_16h = (p32I_16h)GetProcAddress(hinstDLL, "Int32ToInt_16h"); m32I_16l = (p32I_16l)GetProcAddress(hinstDLL, "Int32ToInt_16l"); m16I_32I = (p16I_32I)GetProcAddress(hinstDLL, "Int16ToInt32"); m32f_16h = (p32f_16h)GetProcAddress(hinstDLL, "Float32ToInt_16h"); m32f_16l = (p32f_16l)GetProcAddress(hinstDLL, "Float32ToInt_16l"); m16I_32f = (p16I_32f)GetProcAddress(hinstDLL, "Int16ToFloat32"); AfxMessageBox(L"S7200_PPI.dll已成功载入!"); } else { AfxMessageBox(L"没找到S7200_PPI.dll!"); SendMessage(WM_CLOSE); } } /////////////////////////////////////////////////////////// ```
MFC调用动态链接库问题
``` DLL中添加导出函数如下 #include "stdafx.h" extern "C" __declspec(dllexport) int sum(int a, int b) { return a+b; } 也添加并声明了导出类CMath class _declspec(dllexport) CMath { public: CMath(void); ~CMath(void); int sum(int a, int b); }; MFC项目中调用dll extern "C" __declspec(dllexport) int sum(int a, int b); void Cpaint2Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 int a; a=sum(3,4); } 总是报错 错误 1 error LNK2019: 无法解析的外部符号 _sum,该符号在函数 "public: void __thiscall Cpaint2Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@Cpaint2Dlg@@QAEXXZ) 中被引用 F:\vs练习\paint2\paint2\paint2Dlg.obj ``` 把.dll文件复制到了debug文件里了 请教各位大神,哪里出问题了呀
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程序程序,调试界面能出来了,但是按按钮没反应,弄了几天了。
新手做了个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上加的用来申明全局函数。 };
VC6.0 MFC中多窗口初始化
刚开始学MFC,做个多窗口的小程序。工程选择的是基本对话框。 第一个窗口刚开始就有一个***.cpp和***.rc以及***Dlg.cpp, 在这个窗口中添加的控件说是在***Dlg.cpp中初始化的,后来我又新建了另一个Dialog, 我在这个窗口中加入了几个控件,编译运行可以执行,都可以正常显示,但是我想初始化 第二个窗口的控件,我放在第一个窗口的***Dlg.cpp中初始化会提示控件未定义。请教一下大家,这个应该在哪儿初始化啊。
MFC:想做一个单文档的Tab页面,添加Tab会生成崩溃,有没有大佬教一下,自己百度demo都是dlg的
![图片说明](https://img-ask.csdn.net/upload/201909/03/1567476530_854567.jpg) 在View视图里添加 ``` // m_TabCtrl.InsertItem(0, _T("主 界 面")); ``` 会在主窗口显示出现问题 ``` // 主窗口已初始化,因此显示它并对其进行更新 pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); //崩溃 ```
VC++程序调试,出现winocc.cpp中的问题!!!
我自己编写了一个单文档的小程序,然后运行程序之后出现中断,进过调试寻找到是winocc.cpp中的void CWnd::GetProperty和void CWnd::SetProperty两个函数中的_ASSERT(m_pCtrlSite != NULL);均出现错误。希望大神能帮忙指出错误类型!!!谢谢!!! 这是出错部分代码!! float* try::fun1( )//创建指定区域 { GET dlg; dlg.DoModal(); static float h[4]={dlg.m_x1,dlg.m_y1,dlg.m_x2,dlg.m_y2}; CMapX _m_ctrlMapX; **// 调试的时候出现cMapx hWnd=0x0000000**_ CMapXLayers allLr=m_ctrlMapX.GetLayers(); //取得图层集合 CMapXLayer Lr=allLr.CreateLayer("Stlayer",NULL, 2, 32); CMapXStyle lineSty; //线图元 COleVariant vt; vt.vt=VT_DISPATCH; CMapXFeature newFeature; //新建图元 CMapXPoint pt; //点图元 CMapXPoints pts; //点集合 pt.CreateDispatch(pt.GetClsid()); pts.CreateDispatch(pts.GetClsid()); pts.RemoveAll(); pt.Set(dlg.m_x1,dlg.m_y1); //线的起点 pts.Add(pt); pt.Set(dlg.m_x2,dlg.m_y2); //线的终点 pts.Add(pt); vt.pdispVal=pts.m_lpDispatch; vt.pdispVal->AddRef();//此句不可缺 CMapXFeatureFactory factory=m_ctrlMapX.GetFeatureFactory(); CMapXFeature sidefeature=factory.CreateLine(vt); //创建线图元 lineSty=sidefeature.GetStyle(); //设置线图元的风格 lineSty.SetLineColor(miColorBlue); lineSty.SetLineStyle(36); sidefeature.SetStyle(lineSty.m_lpDispatch); Lr.AddFeature(sidefeature); Lr.Refresh(); //将创建的图元加入到图层中 return h; }
请教一个MFC程序的问题
oid C123Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 www= FindWindow(L"无标题 - 记事本",NULL); www->SetForegroundWindow(); } 这个程序运行会出错请问为什么呀? 出错提示:0x003c0774处有未经处理的异常,0xc0000005:读取位置0x00000020 时发生访问冲突。 www为类中定义的成员变量CWnd* 请问为什么会出错呀?是不是用完了没销毁?
error LNK2005: already defined in CJXXDlg.obj
EDIT1Dlg.obj : error LNK2005: "struct IMath * __cdecl CreateInterface(void)" (?CreateInterface@@YAPAUIMath@@XZ) already defined in CJXXDlg.obj 编译时总是出现这个问题,不知道怎么解决,希望各位可以帮帮忙,谢谢
MFC对话框程序通过按钮弹出子对话框,如何初始化子窗口
要实现的功能就是点击按钮,用dlg.DoModal()弹出子对话框,在子对话框中有CListControl控件,要对CListControl控件进行数据的初始化,但是无法对其进行初始化。子对话类中已经添加了OnInitDialog()方法,感觉没有执行这个方法,求解。 点击按钮事件代码: void CMFCPaikeDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); CDialog dlg(IDD_DIALOGCLASS); dlg.DoModal(); } 子窗口类中的OnInitDialog()代码: BOOL ClassEidt::OnInitDialog() { CDialogEx::OnInitDialog(); classCListctr.InsertColumn(0, _T("id"), LVCFMT_CENTER); classCListctr.InsertColumn(0, _T("name"), LVCFMT_CENTER); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }
ado连接sql时,建立查询有问题,m_pRecordset里面有数据但是查询不到
int i = dlg->m_pRecordset->GetRecordCount(); if (dlg->m_pRecordset->GetRecordCount() != 0) //表中有记录 { try{ dlg->v_Team_no = dlg->m_pRecordset->GetCollect("Team_no"); dlg->v_Team_Cname = dlg->m_pRecordset->GetCollect("Team_Cname"); dlg->v_Team_home = dlg->m_pRecordset->GetCollect("Team_home"); dlg->v_Team_coach = dlg->m_pRecordset->GetCollect("Team_coach"); } catch (_com_error& e) { AfxMessageBox(e.Description()); } nItem=dlg->m_userlist.InsertItem(0xffff,(_bstr_t)dlg->v_Team_no); dlg->m_userlist.SetItem(nItem,1,1,(_bstr_t)dlg->v_Team_Cname,NULL,0,0,0); dlg->m_userlist.SetItem(nItem,2,1,(_bstr_t)dlg->v_Team_home,NULL,0,0,0); dlg->m_userlist.SetItem(nItem,3,1,(_bstr_t)dlg->v_Team_coach,NULL,0,0,0); dlg->m_pRecordset->MoveNext(); } { AfxMessageBox("没有查找到该队伍的信息!"); return; } 这是我的代码,因为查询的是char类型的,sql语句是查询为'T001',语句在sql server里面可以查询得到结果,但是在mfc里面就报错,检测结果说是BOF或者EOF中有一个是真,或者该条记录已经删除,但是用调试可以看到i是21说明记录集里面应该是有21条记录的,不为空呀。 但是调试执行到dlg->v_Team_no = dlg->m_pRecordset->GetCollect("Team_no");这个语句就报错了。 求问是为什么呀 如果是sql语句问题,我把这个语句复制到sqlserver里面,在sql server里面应该也不能查询呀,但结果是可以查询。
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
进程通信方式总结与盘点
​ 进程通信是指进程之间的信息交换。这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。从某方面来讲,进程通信可以解决进程同步问题。 ​ 首先回顾下我们前面博文中讲到的信号量机制,为了实现进程的互斥与同步,需要在进程间交换一定的信息,因此信号量机制也可以被归为进程通信的一种方式,但是也被称为低级进程通信,主要原因为: 效率低:一次只可操作少量的...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
听说了吗?阿里双11作战室竟1根网线都没有
双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此。 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“一地狼藉”;到如今媲美5G的wifi网速,到现场却看不到一根网线;从当年使用商用AP(无线路由器),让光明顶双11当天断网一分钟,到全部使用阿里自研AP……阿里巴巴企业智能事业部工程师们提供的基础保障...
在阿里,40岁的奋斗姿势
在阿里,40岁的奋斗姿势 在阿里,什么样的年纪可以称为老呢?35岁? 在云网络,有这样一群人,他们的平均年龄接近40,却刚刚开辟职业生涯的第二战场。 他们的奋斗姿势是什么样的呢? 洛神赋 “翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。” 爱洛神,爱阿里云 2018年,阿里云网络产品部门启动洛神2.0升...
关于研发效能提升的思考
研发效能提升是最近比较热门的一个话题,本人根据这几年的工作心得,做了一些思考总结,由于个人深度有限,暂且抛转引入。 三要素 任何生产力的提升都离不开这三个因素:人、流程和工具,少了其中任何一个因素都无法实现。 人,即思想,也就是古人说的“道”,道不同不相为谋,是制高点,也是高层建筑的基石。 流程,即方法,也是古人说的“法”。研发效能的提升,也就是要提高投入产出比,既要增加产出,也要减...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
入职阿里5年,他如何破解“技术债”?
简介: 作者 | 都铎 作为一名技术人,你常常会听到这样的话: “先快速上线” “没时间改” “再缓一缓吧” “以后再解决” “先用临时方案处理” …… 当你埋下的坑越来越多,不知道哪天哪位同学就会踩上一颗雷。特别赞同“人最大的恐惧就是未知,当技术债可说不可见的时候,才是最让人不想解决的时候。” 作为一个程序员,我们反对复制粘贴,但是我们经常会见到相似的代码,相同的二方包,甚至整个代码...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
深度学习入门笔记(十八):卷积神经网络(一)
欢迎关注WX公众号:【程序员管小亮】 专栏——深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
你也能看懂的:蒙特卡罗方法
蒙特卡罗方法,也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法 蒙特卡罗方法可以粗略地分成两类:一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问