vs2010写mfc自己额外写的main函数怎么加进mfc中啊

vs2010写mfc自己额外写的main函数怎么加进mfc中啊

4个回答

MFC有自己的主函数,你把你写的函数放复制进去不就行了,或者函数调用。

Walker19900515
朱传林 回复取个名字要低调: 输出到某个控件里肯定是调用相应控件的文本设置函数,我一般用的是Qt,感觉Qt界面更美观。
4 年多之前 回复
jyjfjyjf
取个名字要低调 我会调用了,可是我不会让本来c++里面去的输出显示在mfc的对话框里
4 年多之前 回复

c++输出跟mfc不一样的API。如MFC中用SetWindowText来显示字符串到控件上

在MFC程序中增加控制台
http://www.cnblogs.com/gadfly/archive/2010/10/02/1841197.html
MFC程序环境和控制台程序环境的一些转化
http://blog.sina.com.cn/s/blog_6002b97001018fzh.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
visual studio6.0 mfc程序和控制台程序的简单问题,求大神解答
visual c++6.0中控制台程序的main函数应该放在mfc程序的哪个文件中,成员函数放在mfc的哪个文件中。
将一段代码放入mfc中做成图形界面
如题,我同学已经做好了一个字符界面的小游戏,我的任务是把游戏做成图形界面的。我如何才能把他的代码放入我的mfc工程中呢?比如说他用的头文件我要在哪个cpp中引用,还有,我在mfc工程里没有找到main函数,这让我比较纠结。求大神给解惑。谢谢。本人新手,也是新注册,没有积分可以悬赏
如何在button按键里实现main函数
做了一个mfc框架,里面有很多控件,现在要用某按钮控件实现创建文件的功能,创建文件书上的示例如下,双击按钮出现如下。现在问题在怎么把创建文件的函数放进按钮的void函数之中![图片](https://img-ask.csdn.net/upload/201709/30/1506737395_140792.jpg)![图片](https://img-ask.csdn.net/upload/201709/30/1506737559_580287.jpg)
在vs2010中利用mfc写一个连连看游戏时各种资源窗口啥的等都报“未声明的标识符”问题
写这个连连看游戏刚开始导入各种资源文件改好ID后运行正常,但通过进一步的编程后不知道为什么开始报各种”未声明的标识符“bug(可能中途改了一些什么设置.....),现项目最近运行的log文件如下: ``` 生成启动时间为 2016/5/26 17:37:08。 1>项目“C:\Users\Aliez\documents\visual studio 2010\Projects\Lianliankan\LLK\LLK.vcxproj”在节点 2 上(build 个目标)。 1>InitializeBuildStatus: 正在对“Debug\LLK.unsuccessfulbuild”执行 Touch 任务。 ClCompile: 所有输出均为最新。 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\LLK.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt stdafx.cpp stdafx.cpp C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _UNICODE /D UNICODE /D _AFXDLL /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LLK.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt GameControl.cpp GameDlg.cpp GameLogic.cpp LLK.cpp LLKDlg.cpp LLKDlg.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.h(14): error C2065: “IDD_LLK_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C2146: 语法错误: 缺少“;”(在标识符“m_GameC”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(17): error C2065: “IDD_GAME_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(23): error C2065: “IDD_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(54): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(66): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(66): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(67): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(67): error C2065: “IDC_BTN_BASIC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(79): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(79): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(80): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(87): error C2065: “IDS_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(92): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(108): error C2065: “IDM_ABOUTBOX”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\llkdlg.cpp(161): error C2065: “IDB_MAIN_BG”: 未声明的标识符 LLK.cpp GameLogic.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(15): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(15): error C2065: “s_nRows”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(16): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(16): error C2065: “s_nCols”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(17): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(17): error C2065: “s_nPicNum”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(70): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamelogic.cpp(70): error C2065: “s_nRows”: 未声明的标识符 GameDlg.cpp 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C2146: 语法错误: 缺少“;”(在标识符“m_GameC”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.h(17): error C2065: “IDD_GAME_DIALOG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(32): error C2065: “IDB_Game_BG”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(41): error C2065: “IDC_BTN_START”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(41): error C2065: “IDC_BTN_START”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(54): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(55): error C2065: “IDR_MAINFRAME”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2065: “CGameControl”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2146: 语法错误: 缺少“;”(在标识符“ctr”的前面) 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(109): error C2065: “ctr”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(110): error C2065: “ctr”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(110): error C2228: “.StartGame”的左边必须有类/结构/联合 类型是“'unknown-type'” 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(116): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(116): error C2065: “s_nRows”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(117): error C2653: “CGameControl”: 不是类或命名空间名称 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(117): error C2065: “s_nCols”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(125): error C2065: “m_GameC”: 未声明的标识符 1>c:\users\Aliez\documents\visual studio 2010\projects\lianliankan\llk\gamedlg.cpp(125): error C2228: “.GetElement”的左边必须有类/结构/联合 类型是“'unknown-type'” GameControl.cpp 正在生成代码... 1>已完成生成项目“C:\Users\Aliez\documents\visual studio 2010\Projects\Lianliankan\LLK\LLK.vcxproj”(build 个目标)的操作 - 失败。 生成失败。 已用时间 00:00:15.03 ``` 有关LLKDlg.cpp代码如下: ``` // LLKDlg.cpp : 实现文件 // #include "stdafx.h" #include "LLKDlg.h" #include "afxdialogex.h" #include <afxwin.h> #include "GameDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD =IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CLLKDlg 对话框 CLLKDlg::CLLKDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CLLKDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CLLKDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CLLKDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_BASIC, &CLLKDlg::OnBnClickedBtnBasic) ON_BN_CLICKED(IDC_BTN_BASIC, &CLLKDlg::OnBnClickedBtnBasic) END_MESSAGE_MAP() // CLLKDlg 消息处理程序 BOOL CLLKDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 InitBackground(); // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CLLKDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) ==IDM_ABOUTBOX)//IDM_ABOUTBOX { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CLLKDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else {//创建CPanitDC对象 CPaintDC dc(this); dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);//绘制背景图片 CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CLLKDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CLLKDlg::InitBackground() { CClientDC dc(this);//获得对话框的视频内存 CBitmap bmpMain; bmpMain.LoadBitmap(IDB_MAIN_BG); m_dcMem.CreateCompatibleDC(&dc);//创建与视频内存兼容的内存DC m_dcMem.SelectObject(bmpMain);//将位图组员选入DC //调整窗口大小 CRect rtWin; CRect rtClient; this->GetWindowRect(rtWin);//获得窗口大小 this->GetClientRect(rtClient);//获得客户区大小 //标题栏和外边框的大小 int nSpanWidth = rtWin.Width()-rtClient.Width(); int nSpanHeight = rtWin.Height()-rtClient.Height(); //设置窗口大小 MoveWindow(0,0,800+nSpanWidth,600 + nSpanHeight); CenterWindow(); } void CLLKDlg::OnBnClickedBtnBasic() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::ShowWindow(SW_HIDE); CGameDlg dlg; dlg.DoModal(); } ``` ![图片说明](https://img-ask.csdn.net/upload/201605/26/1464256700_607782.png) 总之希望解决这里各种报”未声明的标识符“问题,有关资源ID我都已经改过与代码中一致了,然而....... 因为老师布置作业要求入了mfc这个坑,请各位前辈菊苣指教,万分感谢.....
mfc如何调用同一解决方案里另一个工程下的控制台程序
现在想通过mfc的一个按钮来打开同一解决方案里另一个工程下的控制台程序,我的想法是直接调用控制台程序的main函数, 但是会报链接错误:无法解析的外部符号_main
win32控制台程序无法找到main函数入口
// FO9-UDP.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <winsock.h> #include <winioctl.h> #pragma comment(lib,"WS2_32") int sd; /* Socket Discripter */ struct sockaddr_in my; struct sockaddr_in dst; struct sockaddr_in from; #define MY_IP 0xC0A8010A // 自身的IP 地址:192.168.001.010 #define MY_PORT 10010 // 自身的端口编号 #define DST_IP 0xC0A80106 // 对方的IP 地址:192.168.001.006 #define DST_PORT 10020 // 对方的端口编号 unsigned char sbuf[2048]; unsigned char rbuf[2048]; // 存在于218TCP.C 中 void main_udp(void); extern void mk_cmd_data(void); extern int chk_rsp_data(int); // 读取扩展MEMOBUS 协议、保持寄存器的内容(SFC=09),制作命令 void mk_cmd_data(void) { // 218 标题部的制作 // 数据类型设定 sbuf[0] = 0x11;// 扩展MEMOBUS (指令命令) // 串行编号设定(每次发送时增加) sbuf[1] = 0x00; // 设定发送目标的通道编号 sbuf[2] = 0x00; // PLC 侧通道不固定,因此可固定为0 // 设定发送目标的通道编号 sbuf[3] = 0x00; // 因电脑中无通道概念,固定为0。 sbuf[4] = 0x00; // 备用 sbuf[5] = 0x00; // 备用 // 所有数据数设定(从218 标题的首部到MEMOBUS 数据的最后) sbuf[6] = 0x16; // L (22 字节=218 标题(12 字节)+ MEMOBUS 数据(10 字节)) sbuf[7] = 0x00; // H sbuf[8] = 0x00;// 备用 sbuf[9] = 0x00;// 备用 sbuf[10] = 0x00;// 备用 sbuf[11] = 0x00;// 备用 // MEMOBUS 数据部的制作 // Length 为从MFC 开始到数据的最后 sbuf[12] = 0x08; // MEMOBUS 数据长度(L) sbuf[13] = 0x00; // MEMOBUS 数据长度(H) // MFC 固定为0x20 sbuf[14] = 0x20; // SFC 为0x09 (读取保持寄存器的内容(扩展)) sbuf[15] = 0x09; // CPU 编号设定 sbuf[16] = 0x10; // 对方为CPU1。多台时为1-4。自身的CPU 编号固定为0。 sbuf[17] = 0x00; // Spare 固定为0 // 参考编号设定 sbuf[18] = 0x00; // Adr(L) 首地址为MW0 sbuf[19] = 0x00; // Adr(H) // 寄存器数设定 sbuf[20] = 0x0A; // DataNum(L) 从首地址读取10 字 sbuf[21] = 0x00; // DataNum(H) } // 响应数据的检查 int chk_rsp_data( int rlen ) { int rc; rc = 0; // 所有数据长度的检查 if ( rlen != 40 )// 读取10 字对应的响应为40 字节 // (218 标题(12 字节)+MEMOBUS 数据(28 字节)) { rc = -1; return( rc ); } // 数据包类型检查 if ( rbuf[0] != 0x19 )// 非MEMOBUS 响应 { rc = -2; return( rc ); } // 串行编号检查 if (sbuf[1] != rbuf[1] )// 与命令的串行编号不一致 { rc = -3; return( rc ); } // 传送文件中的所有数据长度的检查 if (( rbuf[6] != 0x28 ) &&(rbuf[7] !=0x00))// 40 字节= 218 标题(12 字节)+MEMOBUS 数据(28 字节) { rc = -4; return( rc ); } // MEMOBUS 数据长度检查 if (( rbuf[12] != 0x1A ) || (rbuf[13] != 0x00))// 26 字节 { rc = -5; return( rc ); } // MFC 的检查 if ( rbuf[14] != 0x20 )// MFC 固定为0x20 { rc = -6; return( rc ); } // SFC 的检查 if ( rbuf[15] != 0x09 )// SFC 为0x09 (读取保持寄存器的内容) { rc = -7; return( rc ); } // 寄存器数的检查 if (( rbuf[18] != 0x0A ) || (rbuf[19] != 0x00))// 非10 字 { rc = -8; return( rc ); } // 读取寄存器数据rbuf[20] 以后 return( rc ); } void main_udp(void) { WSADATA wsadata; int rc, slen, rlen, fromlen; // Winsock.dll 的使用声明(最初必需) rc = WSAStartup( 0x0101, &wsadata ); if ( rc != 0 ) { exit(0); } // sockaddr 构造体(IP 地址、端口编号等)的清零 memset( (char *)&my, 0, sizeof(struct sockaddr)); memset( (char *)&dst, 0, sizeof(struct sockaddr)); // 自身的IP 地址、端口编号的声明 my.sin_family = AF_INET; my.sin_addr.s_addr = htonl( MY_IP ); my.sin_port = htons( MY_PORT ); // 对方的IP 地址、端口编号的声明 dst.sin_family = AF_INET; dst.sin_addr.s_addr = htonl( DST_IP ); dst.sin_port = htons( DST_PORT ); // UDP 套接字的生成 sd = socket( AF_INET, SOCK_DGRAM, 0 ); if ( sd <= 0 ) { printf( "Error: Socket !!\n" ); exit(0); } // 自局端口编号的捆绑配置 rc = bind( sd, ( struct sockaddr *)&my, sizeof(struct sockaddr_in)); if ( rc == -1 ) { closesocket( sd ); printf( "Error: bind !!\n" ); exit(0); } // 分配自局端口编号后,制作指令数据。 mk_cmd_data(); // 反复执行发送命令和接收响应。 while(1) { // 发送命令数据 // 主控制器不能发送数据时,该处理不会结束。 slen = sendto( sd, reinterpret_cast<const char *>(&sbuf[0]), 22, 0, (struct sockaddr *)&dst, sizeof(struct sockaddr)); // 发送命令(22 字节) if ( slen != 22 )// 如果发送成功,则返回发送的字节数(22 字节)。 { closesocket(sd); printf( "Error: Send !! -> %d\n", slen ); exit(0); } // 接收响应数据 // 子控制器没有发送数据时,该处理不会结束。 fromlen = sizeof(struct sockaddr); //将rbuf从无符号变量,转换为指针变量1-4字节 rlen = recvfrom( sd, reinterpret_cast<char *>(&rbuf[0]), sizeof(rbuf), 0, (struct sockaddr *)&from, &fromlen ); // 接收对方发送的数据 if ( rlen <= 0 )// 如果接收错误则返回0 以下 { closesocket(sd); printf( "Error: Recv !! -> %d\n", rlen ); exit(0); } // 响应数据的检查 rc = chk_rsp_data( rlen ); if ( rc != 0 )// 接收数据异常 { closesocket(sd); exit(0); } sbuf[1] ++;// 增加218 标题的串行编号 printf( "Hit Any Key !!\n" ); } } MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用 已尝试修改项目预处理及系统配置属性,更改为CONSOLE,但是仍然报错?求解
VC对话框程序子对话的onPain函数实现了画线,程序启动,子对话框的画的线没有显示出来?
这是一个VC/MFC基于对话框程序 ,主对话框有一块地方加载了一个子对话框,覆盖在主对话框上,子对话的onPain()函数实现了画线的操作, 当程序启动时,子对话框的画的线没有显示出来,为什么?????? 程序代码是这样的,主对话框的OnInitDialog( ) m_buyinDlg.Create(IDD_DIALOG_BUYIN, this); CRect rectDlg; GetDlgItem(IDC_PIC_MAIN)->GetWindowRect(rectDlg);//在主对话框放置一个图片控件,在这个图片控件加载子对话框 //该函数把屏幕上指定点的屏幕坐标转换成用户坐标。 ScreenToClient(rectDlg); //定位属性页 m_buyinDlg.MoveWindow(rectDlg);
用VC的MFC如何实现图中的查找替换功能?(基本对话框)越简单越好,急!
用VC的MFC如何实现图中的查找替换功能!![图片说明](https://img-ask.csdn.net/upload/201607/05/1467713926_170555.png) 最好是用Replace函数的 // newDlg.cpp : implementation file // #include "stdafx.h" #include "new.h" #include "newDlg.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() ///////////////////////////////////////////////////////////////////////////// // CNewDlg dialog CNewDlg::CNewDlg(CWnd* pParent /*=NULL*/) : CDialog(CNewDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNewDlg) m_txt = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CNewDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNewDlg) DDX_Text(pDX, IDC_EDIT1, m_txt); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNewDlg, CDialog) //{{AFX_MSG_MAP(CNewDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_save, Onsave) ON_BN_CLICKED(IDC_resave, Onresave) ON_BN_CLICKED(IDC_FindReplace, OnFindReplace) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNewDlg message handlers BOOL CNewDlg::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 CNewDlg::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 CNewDlg::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 CNewDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CNewDlg::Onsave() { // TODO: Add your control notification handler code here TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); // 构造打开文件对话框 CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); CString strFilePath; // 显示打开文件对话框 if (IDOK == fileDlg.DoModal()) { // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里 strFilePath = fileDlg.GetPathName(); // SetDlgItemText(IDC_BUTTON1, strFilePath); } AfxMessageBox("保存成功!"); } void CNewDlg::Onresave() { // TODO: Add your control notification handler code here TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); // 构造打开文件对话框 CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); CString strFilePath; // 显示打开文件对话框 if (IDOK == fileDlg.DoModal()) { // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里 strFilePath = fileDlg.GetPathName(); // SetDlgItemText(IDC_BUTTON1, strFilePath); } } void CNewDlg::OnFindReplace() { // TODO: Add your control notification handler code here } 该怎样添加函数
这是一个关于C语言memcpy的相关问题
``` #include <stdio.h> #include <string.h> #include <stdlib.h> #include <afxwin.h> #include "aes.h" //! 程序主函数(Use MFC in a Shared DLL) int main( ) { char mingwen[100]; char miwen[100]; char miyao[16]; char temp[16]; int num=0; printf("请输入明文"); gets(mingwen); printf("请输入密匙"); gets(miyao); num=strlen(mingwen)/16; if(strlen(mingwen)%16!=0) num++; for(int index=0;index<num;index++) { if(index*16+15<strlen(mingwen)) memcpy(temp,&mingwen[0]+index*16,16); if(index*16+15>strlen(mingwen)) memcpy(temp,&mingwen[0]+index*16,strlen(mingwen)-index*16); } ``` 我定义的temp是16位的,但是呢,调试过程中,发现temp,先溢出几个数字,最后长度超过了16,好奇怪
关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题
下边的代码是点击按钮事件的,HttpSendRequest明显已经执行成功,得到的recv.html中依然是登陆页面,不是我想要的登陆后跳过去的页面 ``` #include <afxinet.h> #include <WinInet.h> #include <cstring> #pragma comment(lib,"wininet.lib") void CLOGINDlg::OnOK() { // TODO: Add extra validation here //CDialog::OnOK(); HINTERNET hSession = NULL; HINTERNET hConnect = NULL; HINTERNET hRequest = NULL; //InternerOpen LPCSTR lpszAgent = "Application"; DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG; /* HINTERNET InternetOpen( _In_ LPCTSTR lpszAgent, //指定调用Wininet函数的应用程序或入口,该入口作HTTP协议中用户代理项 _In_ DWORD dwAccessType, //访问要求类型 _In_ LPCTSTR lpszProxyName, //代理服务器的名字 _In_ LPCTSTR lpszProxyBypass,//指向一个字符串,指定一个可选的主机名列表或IP地址 _In_ DWORD dwFlags ); */ hSession = InternetOpenA(lpszAgent, dwAccessType, NULL, NULL, 0); if (!hSession) { printf("网络打开失败!"); return ; } //InternetConnectA LPCSTR lpszServerName = "202.200.144.63"; INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT; DWORD dwService = INTERNET_SERVICE_HTTP; hConnect = InternetConnectA(hSession, lpszServerName, nServerPort, NULL, NULL, dwService, 0, 1); if (!hConnect) { printf("网络连接失败!"); return ; } //HttpOpenRequestA LPCSTR lpszVerb = "GET"; LPCSTR lpszObjectName = "xs_main.aspx?xh=120620223";//网站的对象名,网址在IntetnetConnectA第二个参数指定 LPCSTR lpszVersion = "HTTP/1.1"; LPCSTR lpszReferer = "Referer:http://202.200.144.63/xs_main.aspx?xh=120620223 "; LPCSTR lpszAcceptTypes = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; DWORD dwFlags = INTERNET_FLAG_RELOAD; hRequest = HttpOpenRequestA(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferer, &lpszAcceptTypes, dwFlags, 1); if (!hRequest) { printf("打开请求失败!"); return ; } //HttpSendRequestA LPCSTR lpszHeaders = "Content-Type: application/x-www-form-urlencoded;Cookie: safedog-flow-item=F727C5A572FD29201828136C14E22568; ASP.NET_SessionId=uxizon55w1ua4djitykxu3vl\r\n"; DWORD dwHeadersLength = -1L; char szFormData[1024] = { 0 }; strcpy(szFormData, "__VIEWSTATE=dDwyODE2NTM0OTg7Oz4h2wC4w12c8RCRF3jDvJBjVLPUHQ%3D%3D&txtUserName=120620223&TextBox2=******&txtSecretCode="+m_YZM+"&RadioButtonList1=%D1%A7%C9%FA&Button1=&lbLanguage=&hidPdrs=&hidsc=\r\n");//保存用户名,密码,用户类别及验证码 LPVOID pBuf = (LPVOID)szFormData; BOOL bReturn = HttpSendRequestA(hRequest, lpszHeaders, dwHeadersLength, NULL, 0); if (!bReturn) { printf("返回请求失败!"); return ; }else AfxMessageBox("登陆成功!"); char szRecvBuf[1024 + 1]; // 接受数据缓冲区 DWORD dwNumberOfBytesRead; // 服务器返回大小 DWORD dwRecvTotalSize = 0; // 接受数据总大小 DWORD dwRecvBuffSize = 0; // 接受数据buf的大小 memset(szRecvBuf, 0, 1024 + 1); LPCSTR lpFileName = "recv.html"; DWORD dwNumberOfBytesWritten; HANDLE hOpenFile = (HANDLE)CreateFileA(lpFileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, NULL, NULL); if (hOpenFile == INVALID_HANDLE_VALUE) { printf("打开文件失败!"); hOpenFile = NULL; return ; } do { bReturn = InternetReadFile(hRequest, szRecvBuf, 1024, &dwNumberOfBytesRead); if (!bReturn) { printf("读取文件失败!"); break; } // 统计接受数据的大小 szRecvBuf[dwNumberOfBytesRead] = '\0'; dwRecvTotalSize += dwNumberOfBytesRead; dwRecvBuffSize += strlen(szRecvBuf); WriteFile(hOpenFile, szRecvBuf, dwNumberOfBytesRead, &dwNumberOfBytesWritten, NULL); } while (dwNumberOfBytesRead != 0); CloseHandle(hOpenFile); InternetCloseHandle(hSession); InternetCloseHandle(hConnect); InternetCloseHandle(hRequest); } ```
vs2012里工程文件如何调用在同一解决方案下的工程里的数据
A工程threw是一个控制小车的对话框程序,小车与笔记本通过com1连接,B工程get distance是激光传感器的程序,用于获得激光数据,激光与笔记本通过com2连接。我的想法是在A工程里新建一个线程,实时调用B工程里get distance获得距离数据,但是不知道如何在A工程中调用B工程的函数,看网上说了在A工程中引用B工程,但是点击引用完不知道具体代码怎么写,如是不是要搞个什么命名空间等等还是可以直接调用了(试了好像不行),还有这两个工程分别有main入口是否有影响?同时我看了网上说把一个编程dll文件调用,但那个get distance工程是要连接串口的,不知道是否可行?网上找资料没找到什么可行的,希望有前辈可以指点迷津!图一为解决方案的两个工程,图二为引用界面。![图片说明](https://img-ask.csdn.net/upload/201703/27/1490617817_286752.png)![图片说明](https://img-ask.csdn.net/upload/201703/27/1490618083_337242.png)
想问一下在初始化函数中加这些是什么意思
BOOL CGENEPANEL1Dlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here 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
新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题
cpp文件 // scanDlg.cpp : implementation file // #include "stdafx.h" #include "scan.h" #include "scanDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg dialog used for App About class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation 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() // CscanDlg dialog CscanDlg::CscanDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CscanDlg::IDD, pParent) , m_star_port(_T("")) , m_end_port(_T("")) , m_IP(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CscanDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_list); DDX_Text(pDX, IDC_EDIT2, m_star_port); DDX_Text(pDX, IDC_EDIT3, m_end_port); DDX_Text(pDX, IDC_EDIT1, m_IP); } BEGIN_MESSAGE_MAP(CscanDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CscanDlg::OnBnClickedButton1) END_MESSAGE_MAP() // CscanDlg message handlers BOOL CscanDlg::OnInitDialog() { CDialogEx::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) { 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); } } // 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 } hostent* CscanDlg::g_pHost = 0; SOCKET CscanDlg::sock = 0; void CscanDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::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 CscanDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<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 { CDialogEx::OnPaint(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CscanDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CscanDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here send_revc((LPSTR)(LPCTSTR)m_IP,(LPSTR)(LPCTSTR)m_star_port,(LPSTR)(LPCTSTR)m_end_port,&m_list);//char ch1[],char tr1[],char tr2[] } void CscanDlg ::send_revc(char ch1[],char tr1[],char tr2[],CListBox* m_list) { WSADATA WSAData; WSAStartup(MAKEWORD(2,2), &WSAData); sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);//定义套接字 BOOL flag = true; setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag)); char sLocalName[64]; gethostname((char*)sLocalName, sizeof(sLocalName)-1); g_pHost = gethostbyname(sLocalName); sockaddr_in addr_local; addr_local.sin_addr = *(in_addr *)g_pHost->h_addr_list[0]; //绑定到本地网卡,INADDR_ANY不行 addr_local.sin_family = AF_INET;// addr_local.sin_port = htons(SOURCE_PORT); bind(sock, (PSOCKADDR)&addr_local, sizeof(sockaddr_in));//绑套接字 DWORD dwValue = 1; SADDR sAddr; USHORT int1,int2; sAddr.m_destip=ch1; sAddr.m_starpost=atoi(tr1); sAddr.m_endpost=atoi(tr2); ioctlsocket(sock, SIO_RCVALL, &dwValue); int nTimeOut = 500;//设置超时 setsockopt(sock,SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOut, sizeof(nTimeOut)); HANDLE threads[2];//开双线程 threads[0] = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)revcfunc,(LPVOID)m_list,0,NULL); threads[1] = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)sendfunc,(LPVOID)(&sAddr), 0,NULL); WaitForMultipleObjects(2,threads,FALSE,INFINITE); } USHORT CscanDlg ::checksumfunc(USHORT *buffer, int size)//检验和函数 { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~cksum); } void CscanDlg ::sendfunc(SADDR* sAddr ) { IP_HEADER ipHeader; TCP_HEADER tcpHeader; PSD_HEADER psdHeader; char Sendto_Buff[MAX_BUFF_LEN]; //发送缓冲区 unsigned short check_Buff[MAX_BUFF_LEN]; //检验和缓冲区 const char tcp_send_data[]={"This is my homework of networt,I am happy!"}; BOOL flag; int rect,nTimeOver; //先试一下在外面弄好套接字初始化行不行 flag=true; nTimeOver=1000; //填充IP首部 ipHeader.h_verlen=(IPVER<<4 | sizeof(ipHeader)/sizeof(unsigned long)); ipHeader.tos=(UCHAR)0; ipHeader.total_len=htons((unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+sizeof(tcp_send_data)); ipHeader.ident=0; //16位标识 ipHeader.frag_and_flags=0; //3位标志位 ipHeader.ttl=128; //8位生存时间 ipHeader.proto=IPPROTO_UDP; //协议类型 ipHeader.checksum=0; //检验和暂时为0 ipHeader.sourceIP=*(int*)g_pHost->h_addr_list[0]; //32位源IP地址可以直接获取 ipHeader.destIP=inet_addr(sAddr->m_destip); //32位目的IP地址 //计算IP头部检验和 memset(check_Buff,0,MAX_BUFF_LEN); memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER)); ipHeader.checksum=checksumfunc(check_Buff,sizeof(IP_HEADER)); //构造TCP伪首部 psdHeader.saddr=ipHeader.sourceIP; psdHeader.daddr=ipHeader.destIP; psdHeader.mbz=0; psdHeader.ptcl=ipHeader.proto; psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data)); for(int i=sAddr->m_starpost;i<sAddr->m_endpost;i++) //填充TCP首部 { tcpHeader.th_dport=htons(i); //16位目的端口号 tcpHeader.th_sport=htons(SOURCE_PORT); //16位源端口号 tcpHeader.th_seq=0; //SYN序列号 tcpHeader.th_ack=0; //ACK序列号置为0 //TCP长度和保留位 tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0); tcpHeader.th_flag=1; //修改这里来实现不同的标志位探测,2是SYN,1是//FIN,16是ACK探测 等等 tcpHeader.th_win=htons((unsigned short)16384); //窗口大小 tcpHeader.th_urp=0; //偏移大小 tcpHeader.th_sum=0; //检验和暂时填为0 //计算TCP校验和 memset(check_Buff,0,MAX_BUFF_LEN); memcpy(check_Buff,&psdHeader,sizeof(psdHeader)); memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader)); memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER), tcp_send_data,sizeof(tcp_send_data)); tcpHeader.th_sum=checksumfunc(check_Buff,sizeof(PSD_HEADER)+ sizeof(TCP_HEADER)+sizeof(tcp_send_data)); //填充发送缓冲区 memset(Sendto_Buff,0,MAX_BUFF_LEN); memcpy(Sendto_Buff,&ipHeader,sizeof(IP_HEADER)); memcpy(Sendto_Buff+sizeof(IP_HEADER),&tcpHeader, sizeof(TCP_HEADER)); memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), tcp_send_data,sizeof(tcp_send_data)); int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+ sizeof(tcp_send_data); //发送数据报的目的地址 SOCKADDR_IN dest; memset(&dest,0,sizeof(dest)); dest.sin_family=AF_INET; dest.sin_addr.s_addr=inet_addr(sAddr->m_destip); dest.sin_port=htons(i); rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest)); } } void CscanDlg ::revcfunc(CListBox* m_list) { CString str; char RecvBuf[MAX_BUFF_LEN]; IP_HEADER* ip; TCP_HEADER* tcp; while(1) { int ret = recv(sock, RecvBuf, MAX_BUFF_LEN, 0); if (ret > 0) { ip = (IP_HEADER*)RecvBuf; tcp = (TCP_HEADER*)(RecvBuf + (ip->h_verlen&0x0f)*4); str.Format(_T("%hu"), tcp->th_sport); m_list->AddString(str); } else str.Format(_T("%d"),ret),m_list->AddString(str); } } 头文件// scanDlg.h : header file // #pragma once #include<winsock2.h> #include<ws2tcpip.h> #include<stdio.h> #pragma comment(lib,"ws2_32.lib") //#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1) #include <stdlib.h> #include <windows.h> #include <time.h> #include "afxwin.h" #define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值 #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define SOURCE_PORT 8088 //local TCP segment source port // CscanDlg dialog class CscanDlg : public CDialogEx { // Construction public: CscanDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_SCAN_DIALOG }; typedef struct ip_hdr //定义IP首部 { UCHAR h_verlen; //4位首部长度,4位IP版本号 UCHAR tos; //8位服务类型TOS USHORT total_len; //16位总长度(字节) USHORT ident; //16位标识 USHORT frag_and_flags; //3位标志位 UCHAR ttl; //8位生存时间 TTL UCHAR proto; //8位协议 (TCP, UDP 或其他) USHORT checksum; //16位IP首部校验和 ULONG sourceIP; //32位源IP地址 ULONG destIP; //32位目的IP地址 }IP_HEADER; typedef struct tsd_hdr //定义TCP伪首部 { ULONG saddr; //源地址 ULONG daddr; //目的地址 UCHAR mbz; //没用 UCHAR ptcl; //协议类型 USHORT tcpl; //TCP长度 }PSD_HEADER; typedef struct tcp_hdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 ULONG th_seq; //32位序列号 ULONG th_ack; //32位确认号 UCHAR th_lenres; //4位首部长度/6位保留字 UCHAR th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER; typedef struct SADDR //定义TCP首部 { char* m_destip; USHORT m_starpost; USHORT m_endpost; }; USHORT static checksumfunc(USHORT *buffer, int size); void static sendfunc(SADDR* sAddr); void static revcfunc(CListBox* m_list); void send_revc(char ch1[],char tr1[],char tr2[],CListBox* m_list); SOCKET static sock; //用于收发TCP报文段的全局socket hostent static *g_pHost; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: CListBox m_list; afx_msg void OnBnClickedButton1(); CString m_star_port; CString m_end_port; CString m_IP; };
c++/CLR dll调用问题(一个很神奇的问题,望解答)
目前遇到一个很奇怪的问题。 创建控制台程序CLR console application ,添加该dll和lib(工程属性中添加lib目录及名称,dll放到dedug文件夹下),编译通过,完全没有问题 创建windows Forms application,用同样方法添加dll和lib,编译出错,出错地方就是调用的dll函数不成功。 dll代码如下 //h文件 #if !defined(_FTDCTRADERAPI_H) #define _FTDCTRADERAPI_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ThostFtdcUserApiStruct.h" #if defined(ISLIB) && defined(WIN32) #ifdef LIB_TRADER_API_EXPORT #define TRADER_API_EXPORT __declspec(dllexport) #else #define TRADER_API_EXPORT __declspec(dllimport) #endif #else #define TRADER_API_EXPORT #endif class TRADER_API_EXPORT CThostFtdcTraderApi { public: static CThostFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = ""); }; 控制台程序,成功运行 #include "stdafx.h" #include ".\ThostTraderApi\ThostFtdcTraderApi.h" using namespace System; int main(array<System::String ^> ^args) { CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi(); return 0; } winform程序 // 2.cpp : main project file. #include "stdafx.h" #include "Form1.h" #include ".\ThostTraderApi\ThostFtdcTraderApi.h" using namespace My2; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Enabling Windows XP visual effects before any controls are created Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi(); // Create the main window and run it Application::Run(gcnew Form1()); return 0; } 报错 error LNK2028: unresolved token (0A00000F) "public: static class CThostFtdcTraderApi * __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(char const *)" (?CreateFtdcTraderApi@CThostFtdcTraderApi@@$$FSMPAV1@PBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)我尝试去掉该lib会出现同样的错误,即在winform下调用失败了 产生了两个问题: 1、如何才能在winform下成功调用该lib和dll 2、个人猜想其调用失败是不是h头文件没有说明,即该段 #if !defined(_FTDCTRADERAPI_H) #define _FTDCTRADERAPI_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ThostFtdcUserApiStruct.h" #if defined(ISLIB) && defined(WIN32) #ifdef LIB_TRADER_API_EXPORT #define TRADER_API_EXPORT __declspec(dllexport) #else #define TRADER_API_EXPORT __declspec(dllimport) #endif #else #define TRADER_API_EXPORT #endif 如何更改? 3、我尝试建立了win32,MFC工程,均能成功编译。这个到底是怎么回事,求高手解答。
请教CreateRemoteThread远程注入进程的问题
我在控制台程序里用代码在宿主进程里注入一个MessageBox函数,能够成功运行,宿主进程显示对话框后一切正常,可是我用相同的代码在MFC创建的基于对话框程的序里,使用按钮来实现时,注入的对话框能够成功显示,但是一旦关闭注入的对话框,宿主进程就崩溃,我就纳闷了。我试过权限的问题,管理员权限运行也不行,在代码里改令牌也不行,请问到底什么原因导致的这种现象。以下是代码。 控制台程序 ``` #include <windows.h> typedef int (__stdcall * PFN_MESSAGEBOX)(HWND, LPCTSTR, LPCTSTR, DWORD); struct RemoteParam { char sShow[12]; DWORD dwMessageBox; }; DWORD WINAPI threadProc(LPVOID lpParameter) { RemoteParam *rp=(RemoteParam*)lpParameter; PFN_MESSAGEBOX pfnMessageBox=(PFN_MESSAGEBOX)(rp->dwMessageBox); pfnMessageBox(NULL,rp->sShow,rp->sShow,0); return 0; } void main() { DWORD proId; const DWORD dwThreadSize=4096; HWND windHandle=::FindWindow(NULL,"MyGame"); ::GetWindowThreadProcessId(windHandle,&proId); HANDLE proHandle=::OpenProcess(PROCESS_ALL_ACCESS,false,proId); void* allcAddr=::VirtualAllocEx(proHandle,0,dwThreadSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); ::WriteProcessMemory(proHandle,allcAddr,&threadProc,dwThreadSize,0); HMODULE hUser32=::LoadLibrary("User32.dll"); RemoteParam RemoteData; ZeroMemory(&RemoteData,sizeof(RemoteParam)); RemoteData.dwMessageBox=(DWORD)::GetProcAddress(hUser32,"MessageBoxA"); strcat(RemoteData.sShow,"Hello\0"); RemoteParam* paramAndFunc=(RemoteParam*)::VirtualAllocEx(proHandle,0,sizeof(RemoteData),MEM_COMMIT,PAGE_READWRITE); ::WriteProcessMemory(proHandle,paramAndFunc,&RemoteData,sizeof(RemoteData),0); DWORD dwId; HANDLE hRemoteHandle=::CreateRemoteThread(proHandle,NULL,0,(LPTHREAD_START_ROUTINE)allcAddr,paramAndFunc,0,&dwId); CloseHandle(hRemoteHandle); FreeLibrary(hUser32); } ``` MFC按钮消息响应函数里的代码 ``` typedef int (__stdcall * PFN_MESSAGEBOX)(HWND, LPCTSTR, LPCTSTR, DWORD); struct RemoteParam { char sShow[12]; DWORD dwMessageBox; }; DWORD WINAPI threadProc(LPVOID lpParameter) { RemoteParam *rp=(RemoteParam*)lpParameter; PFN_MESSAGEBOX pfnMessageBox=(PFN_MESSAGEBOX)(rp->dwMessageBox); pfnMessageBox(NULL,rp->sShow,rp->sShow,0); return 0; } void CMyDlg::OnButtonPourinto() { //enableDebugPriv(); DWORD proId; const DWORD dwThreadSize=4096; HWND windHandle=::FindWindow(NULL,"MyGame"); ::GetWindowThreadProcessId(windHandle,&proId); HANDLE proHandle=::OpenProcess(PROCESS_ALL_ACCESS,false,proId); void* allcAddr=::VirtualAllocEx(proHandle,0,dwThreadSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE ); ::WriteProcessMemory(proHandle,allcAddr,&threadProc,dwThreadSize,0); RemoteParam RemoteData; ZeroMemory(&RemoteData,sizeof(RemoteParam)); HINSTANCE hUser32 = LoadLibrary("User32.dll"); RemoteData.dwMessageBox=(DWORD)::GetProcAddress(hUser32,"MessageBoxA"); strcat(RemoteData.sShow,"Hello\0"); RemoteParam* paramAndFunc=(RemoteParam*)::VirtualAllocEx(proHandle,0,sizeof(RemoteData),MEM_COMMIT,PAGE_READWRITE); ::WriteProcessMemory(proHandle,paramAndFunc,&RemoteData,sizeof(RemoteData),0); DWORD dwId; HANDLE hRemoteHandle=::CreateRemoteThread(proHandle,NULL,0,(LPTHREAD_START_ROUTINE)allcAddr,paramAndFunc,0,&dwId); CloseHandle(hRemoteHandle); FreeLibrary(hUser32); } ```
怎么起个标题好呢,就windowsAPI吧
windows程序都不是底层的东西,而是使用微软已经设计好的API啊,是这样吗? 那问题就来了, windows的底层东西是啥呢? 是机器码吗?还是汇编??? 微软又怎么设计这些API呢? 是不是像定义一个C++函数或者一个C++类那样呢? 而在C++是直接在main()里面调用这些我们自己设计的函数或类。 而微软是不是把这些已经设计好的函数或者类包成一个文件,而这个文件名是不是windows.h (所以在windows程序都中使用这个文件#include<windows.h>) 那微软是不是这样发布这个文件的呢? 把这个文件放在windows系统文件里面跟着系统文件发不出来呢? 还有一种可能就是微软把这个文件放在visual studio里面发不出来呢? 上面的问题是多了点,如果你没心情回答就回其中的一个好了,能一一回答那就多谢了![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)
VS2013 LNK2019的问题
代码是#include <Windows.h> #include "stdio.h" #include "stdlib.h" //#include "“winbase.h”" #define BUFSIZE 1024 BOOL GetDiverInfo(LPSTR szDrive); int main(int argc, CHAR* argv[]) { CHAR szLogicaldriveStrings[BUFSIZE]; PCHAR szDrive; ZeroMemory(szLogicaldriveStrings, BUFSIZE); GetLogicalDriveStrings(BUFSIZE - 1, szLogicaldriveStrings); szDrive = (PCHAR)szLogicaldriveStrings; do { if (!GetDiverInfo(szDrive)) { printf("\nGet Volume Information Error : %d ", GetLastError()); } szDrive += (lstrlen(szDrive) + 1); } while (*szDrive != '\x00'); return 0; } BOOL GetDriverInfo(LPSTR szDrive) { UINT uDriverType; DWORD dwVolumeSerialNumber; DWORD dwMaximumComponentlength; DWORD dwFileSystemFlags; CHAR szFileSystemNameBuffer[BUFSIZE]; CHAR szDriveName[MAX_PATH]; printf("\n%s\n", szDrive); uDriverType = GetDriveType(szDrive); switch (uDriverType) { case DRIVE_UNKNOWN: printf("The driver type cannot be determined!"); break; case DRIVE_NO_ROOT_DIR: printf("The root path is invalid,for example,no volume is mounted at the path"); break; case DRIVE_REMOVABLE: printf("The drive is a type that has removable media,for example:a floppy drive or removable hard disk"); break; case DRIVE_FIXED: printf("The drive is a type that cannot be removed, for example,a fixed hard drive"); break; case DRIVE_REMOTE: printf("This drive is a remote(network) drive"); break; case DRIVE_CDROM: printf("This drive is a CD-ROM drive."); break; case DRIVE_RAMDISK: printf("This drive is a RAM disk"); break; default: break; } if (!(GetVolumeInformation( szDrive, szDriveName, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentlength, &dwFileSystemFlags, szFileSystemNameBuffer, BUFSIZE))) { return FALSE; } if (0 != lstrlen(szDriveName)) { printf("\nDrive Name is %s.\n", szDriveName); } printf("\nVolume Serial is %u.", dwVolumeSerialNumber); printf("\nMaximum Component Length is %u.", dwMaximumComponentlength); printf("\nSystem Type is %s.\n", szFileSystemNameBuffer); if (dwFileSystemFlags & FILE_VOLUME_QUOTAS) { printf("The file system supports disk Quotas.\n"); } if (dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS) { printf("The file system does not support volume mount points.\n"); } if (dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH) { printf("The file system supports case-sentitive file name.\n"); } printf("...\n"); return TRUE; } 错误是错误 1 error LNK2019: 无法解析的外部符号 "int __cdecl GetDiverInfo(char *)" (?GetDiverInfo@@YAHPAD@Z),该符号在函数 _main 中被引用 D:\资料\代码\mfc测试\遍历卷并获取其属性\遍历卷并获取其属性\源.obj 遍历卷并获取其属性
两个窗口穿参数,指针数据丢失
在头文件里面声明了一个 struct Param { BITMAPINFO *pinfo; BYTE *pbit; DWORD h; DWORD w; };结构体 程序绝大部分如下 #include "stdafx.h" #include <windows.h> #include <windowsx.h> #include "resource.h" #include "MainDlg.h" #include "SHOWDLG.h" #include <stdio.h> #include <commdlg.h> BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND chuli=GetDlgItem(hwnd,IDC_chuli); ComboBox_InsertString(chuli,-1,TEXT("傅里叶变换")); ComboBox_InsertString(chuli,-1,TEXT("什么二值化")); ComboBox_InsertString(chuli,-1,TEXT("获取边缘梯度图像")); ComboBox_InsertString(chuli,-1,TEXT("还有什么阈值")); return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { HWND chuli=GetDlgItem(hwnd,IDC_chuli); int n; OPENFILENAME ofn; char szFile[MAX_PATH]; DWORD m_nHeight, m_nWidth; HWND h_static=GetDlgItem(hwnd,IDC_s); HDC hdc_static=GetDC(h_static); Param params; switch(id) { case IDC_OK://为什么不能开同一张图片两次? { ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0BMP\0*.bmp\0JPG\0*.jpg"); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = TEXT('\0');//艹,不加这一句还打不开,不明所以 ofn.nFilterIndex = 3; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.hwndOwner = hwnd; ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if(GetOpenFileName(&ofn)) { if(3==ofn.nFilterIndex) { MessageBox(hwnd,ofn.lpstrFile,TEXT("问好"),MB_OK); HANDLE Hbmp=CreateFile(ofn.lpstrFile,GENERIC_READ |GENERIC_WRITE, 0, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); HANDLE m_Hbmp=CreateFileMapping(Hbmp,NULL,PAGE_READWRITE,0,0x1400000,TEXT("maptest")); if( INVALID_HANDLE_VALUE==m_Hbmp) { MessageBox(hwnd,TEXT("映像创建失败"),TEXT("error"),MB_OK); return; } LPVOID lpBase = MapViewOfFile(m_Hbmp, FILE_MAP_ALL_ACCESS, 0, 0, 0); //params = lpBase; BITMAPFILEHEADER *pFileHeader; BITMAPINFO *pInfoHeader; pFileHeader = (BITMAPFILEHEADER*)lpBase; BYTE *pBits = (BYTE*)lpBase + pFileHeader->bfOffBits; pInfoHeader = (BITMAPINFO*)((BYTE*)lpBase + sizeof(BITMAPFILEHEADER)); m_nHeight = pInfoHeader->bmiHeader.biHeight; m_nWidth = pInfoHeader->bmiHeader.biWidth; HBITMAP hBitmap = CreateCompatibleBitmap(hdc_static, m_nWidth, m_nHeight); SelectObject(hdc_static, hBitmap); params.w = m_nWidth; params.h = m_nHeight; params.pinfo = pInfoHeader;//结构体指针的赋值有问题 params.pbit = pBits; int nRet = SetDIBitsToDevice(hdc_static,0,0,m_nWidth,m_nHeight,0,0,0,m_nHeight,pBits,pInfoHeader,DIB_RGB_COLORS); InvalidateRect((HWND)Hbmp, NULL, TRUE); DeleteObject(hBitmap); ReleaseDC(hwnd,hdc_static); //UnmapViewOfFile(lpBase); CloseHandle(m_Hbmp); } } } break; case IDC_DOIT: { n=ComboBox_GetCurSel(chuli); HINSTANCE hinstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE); while(n<0) { MessageBox(hwnd,TEXT("请选择处理方式"),TEXT("提示"),MB_OKCANCEL); break; } if(n<0) { break; } switch(n) { //LPARAM *par; //par=(long*)&params; case 0: { DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_SHOWDLG),NULL,SHOWDLG_Proc,(long)&params); MessageBox(NULL,TEXT("傅里叶变换"),TEXT("你选择了"),MB_OK); } break; case 1: { MessageBox(NULL,TEXT("什么二值化"),TEXT("你选择了"),MB_OK); DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_SHOWDLG),NULL,SHOWDLG_Proc,300); } break; case 2: { MessageBox(NULL,TEXT("获取边缘梯度图像"),TEXT("你选择了"),MB_OK); DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_SHOWDLG),NULL,SHOWDLG_Proc,300); } break; case 3: { MessageBox(NULL,TEXT("还有什么阈值"),TEXT("你选择了"),MB_OK); DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_SHOWDLG),NULL,SHOWDLG_Proc,300); } break; default: break; } } break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); } 然后在另一个窗口函数里面 BOOL SHOWDLG_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { Param * pa = (Param*)lParam ;//DC没有问题,传进来的指针指的地方不对 SetDIBitsToDevice(h_sdc,0,0,pa->w,pa->h,0,0,0,pa->h,pa->pbit,pa->pinfo,DIB_RGB_COLORS); return TRUE; } 调试发现在红色标记语句执行后params里面的数据丢失(之前调试看的数据都正常),这句UnmapViewOfFile(lpBase);不释放就好了,但是传递给另一个窗口的时候结构体里面的数据就全没了,定义全局变量也没用,现在想做的就是在两个窗口里面都显示同一个图片,以后再做图像处理,小弟都是自学的,MFC不太熟悉,想请各位大神指教一下,感激不尽!
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 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)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了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...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问