这么设置的话就不用再在系统的path路径下设置了。
解决方法是把DirectX的include文件放到sdk的include路径的后面见图,这个要手工添加不能按下黑色的小三角使用对话框添加。:
4.在mfc程序中,是不可以调用AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0)这个函数的,因为在mfc程序框架中已经调用过了。
string 转化 char类型 string str; char *a; a=str.c_ctr();
http://wenku.baidu.com/link?url=kvxtJtAipKJQahBz81HqJdgS9IHdKF2acMI1pYt2g52yWTLZY-tbcM67Kfm-nuYL085bu7qV86OyFvDXOi94E8nVZ_AlkLVQld2AOh0db_W
在view类中调用:
this->Invalidate(); //this->UpdateWindow();
原因是.h文件被多次包含,解决办法:在头文件中加入
#pragma once
class t { static int a ; void hello(); };在初始化时应该采用
int t::a = 3;的形式。否则会产生link 错误:无法解析的外部符号:a之类的错误。
http://mituhao.diandian.com/post/2012-01-05/40027609137
利用上面的网址介绍的方法大部分人发现根本不能用,因为大部分人的vs上面的那个选项的对勾是打上的,解决方法是:
(1)在那个选项上的对勾去掉,点击确定。
(2) 重启vs
(3) 把那个对勾选上。
(4)重新启动vs。ok问题解决。
我出现这个问题的原因是由于我使用了ue的列模式,然后直接保存了,没有转换成行模式。
多线程编程的难点在于同步,
#include<Windows.h> #include<process.h> #include<iostream> DWORD WINAPI thread(LPVOID pvoid) { HANDLE hMutex = (HANDLE)pvoid; while(1) { WaitForSingleObject(hMutex,INFINITE); std::cout<<"thread"<<std::endl; ReleaseMutex(hMutex); } return 0; } int main() { HANDLE hMutex; hMutex = CreateMutex(NULL,FALSE,"onlyOne"); if(hMutex) { if(ERROR_ALREADY_EXISTS == GetLastError() ) { std::cout<<"alread run"<<std::endl; return -1; } } //_beginthread(thread,0,NULL); HANDLE hTread1= CreateThread(NULL,0,thread,(LPVOID)hMutex,0,NULL); CloseHandle(hTread1); while(1) { WaitForSingleObject(hMutex,INFINITE); std::cout<<"main"<<std::endl; Sleep(200); ReleaseMutex(hMutex); } }
参考网址:http://bbs.csdn.net/topics/220013347
#include<iostream> int main() { int a = 20; char buf[10]; sprintf(buf,"%d",a); std::cout<<buf<<std::endl; std::cin>>a; return 0; }
#include<iostream> #include<opencv\cv.h> #include<opencv\highgui.h> using namespace cv; using namespace std; int main() { cv::Mat mat= imread("hello.jpg"); char *t = "./tt/temp.jpg"; if( imwrite(t,mat) == false) std::cout<<"tt"<<std::endl; return 0; }
http://hi.baidu.com/neutblue/item/eeea9d7e60edc92fd6a89c62
http://blog.sina.com.cn/s/blog_4cce4f6a0100buel.html
我推荐使用的一种方法:使用友元函数方法:友元函数既是一个独立的函数,又可以访问类中的私有变量,又符合线程要求是一个独立函数的要求,所以我认为是实现多线程的很好的一个选择。
#include<iostream> #include<process.h> #include<Windows.h> class t; void setA(t &_t,int b); class t{ public: friend void setA(PVOID pvoid ); private: int a; }; struct param{ public: t &_t; int b; }; void setA(PVOID pvoid ) { //t *ptr = (t*)pvoid ; param *ptr = (param *)pvoid ; for(int i=0;i<20000;i++) { ptr->_t.a = 2; std::cout<<ptr->_t.a<<std::endl; } } void main() { t _t; int b = 0; param p ={_t,b}; param *ptr = &p; _beginthread(setA,0,&p); Sleep(3000); std::cout<<"main()"<<std::endl; //std::cout<<_t.a <<std::endl; }
http://blog.csdn.net/coder_xia/article/details/6566708
另外补充:time函数在windows系统中的单位是秒。
15:
解决办法:
http://longtianyu1.blog.163.com/blog/static/99819652012113112827491/
终极解决方案:
VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可,但是没新建一个项目都要这样设置一次。
在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“error LNK1123”错误,经过上网查资料,解决方案为:
第一步:与上相同。
第二步:将 项目|项目属性|配置属性|连接器|清单文件|嵌入清单 “是”改为“否”。
第三步:一般计算机经过上两步设置就能解决问题了,但是如果还有问题,那就按一下方法解决:
计算机是否为64bit操作系统,如是,继续2。
查找是否有两个cvtres.exe。一个是C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe, 另一个是C:\Windows\Microsoft.NET\Framework\v
4.0.30319\cvtres.exe。右键属性|详细信息 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。
意外的是,治本的办法是第三步,删除旧版本的cvtres.exe后,就不需要每次都设置配置了。
wchar_t *test = L"hello";
OutputDebugString(test);即可在输出窗口出现调试出的“hello”字符串
TRACE("Create database successful."); 可以起到跟他一样的效果。
17: 使用std::vector 删除元素。
#include<vector> #include<iostream> using namespace std; void main() { vector<int> a ; a.push_back(1); a.push_back(2); a.push_back(3); a.push_back(4); a.push_back(5); vector<int>::iterator it; for(it = a.begin();it != a.end();it++) { if(*it== 3) { it = a.erase(it); } cout<<*it<<endl; } }
delete p; p = nullptr;
std::bitset
http://msdn.microsoft.com/en-us/library/ms926680 msdn文档。
http://blog.csdn.net/password318/article/details/6858647 carray的使用例子
carray分的种类可以参看msdn文档。使用例子见下:
void ClllView::OnDraw(CDC* /*pDC*/) { ClllDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //OutputDebugString(L"ttt"); CArray<CPoint,CPoint&> m_Array;//普通array使用 m_Array.SetSize(10,10); CPoint pt1(10,10); m_Array.Add(pt1); CPoint pt2(10,50); m_Array.Add(pt2); CPoint pt3(10,100); CPoint pt4(200,33); m_Array.Add(pt3); m_Array.Add(pt4); int size = m_Array.GetSize(); CClientDC dc(this); dc.MoveTo(0,0); CPoint pt; for(int i=0;i<size;i++) { pt= m_Array.GetAt(i); dc.LineTo(pt); OutputDebugString(L"tt"); } CStringArray ar;//cstringarray使用 CString str("111111"); ar.Add(str); OutputDebugString(str.GetString()); // TODO: 在此处为本机数据添加绘制代码 }
CTime time = CTime::GetCurrentTime(); CString str = time.Format("%H:%M:%S"); pdc->TextOutW(0,0,str);
22:MFC中的定时器的KillTimer(IDTIMER1)函数应该在窗口销毁之前调用,否则就会出现断言错误。SetTimer(IDTIMER1,1000,NULL);函数应该在窗口创建之后调用,否则同样会出现错误。
23:mfc的Cstring转换成double是atof,double转换成Cstring是formate。%lf。
24:使窗口处在最 前面
CRect rcMy; ::GetWindowRect(m_hWnd, rcMy); //得到当前的窗口位置 //设为总在最前 SetWindowPos(&wndTopMost, rcMy.left, rcMy.top, rcMy.Size().cx, rcMy.Size().cy, SWP_SHOWWINDOW); //取消总在最前 //SetWindowPos(&wndNoTopMost, rcMy.left, rcMy.top, rcMy.Size().cx, rcMy.Size().cy, SWP_SHOWWINDOW);
25:CFileDialog自动改变当前目录问题解决方案
http://blog.csdn.net/zhuce0001/article/details/8990850
26:串口的写法:
m_portNum="\\\\.\\COM10";不应该只写com10