1.
關於#pragma warning
http://dev.csdn.net/article/66/66106.shtm
2.
installshield 使用:
http://www.cnblogs.com/Cindy_weiwei/archive/2009/05/19/1460230.html
3.
NTDLL.DLL): 0xC0000005: Access Violation問題:
A-------在內部進行調試的時候發現,是調用了new操作符的緣故。
很不理解,在dll中調用new操作符會出現這麼一個問題,網路上搜尋,在微軟msdn論壇(具體地址:http://forums.msdn.microsoft.com/zh-CN/vclanguage/thread/951a04be-6b52-4617-b396-9c35e3755759/)上搜尋到相關問題。
於是按照說明,將dll的產生方式修改為"共用mfc方式"
project properties -> general -> Project Defaults->Use of MFC
To set the properties "Use MFC In A Shared DLL "
另外,在網上也發現另外一篇,console方面的, 解決辦法:使用c runtime
library的動態連結版本(在你的console工程中設定忽略所有的預設連結庫,然後連結到msvcrt.lib就可以了)(具體地址:http://www.poptool.net/software/p606/A60674501.shtml)
B------ 一般出現此問題都是因為指標未初始化等出現的訪問違規。但我出現這個錯誤的描述如下:
描述:vc程式在視窗中添加edit空間(或其他控制項)及對應變數後(都是通過類嚮導添加的,沒有認為因素),編譯及串連都能正常通過,但運行時會出現0xC0000005:Access
Violation錯誤。經跟蹤調試發現,當程式運行到C******App::InitInstance() 中的m_pMainWnd =
&dlg;語句時,發生錯誤。
解決:重新Rebuilt All(全部重建)來重新編譯即可。
4.
崩潰地址 程式調試
http://blog.csdn.net/guo_wei/archive/2007/09/29/1805978.aspx
5.
記憶體池
http://www.codeproject.com/KB/cpp/MemoryPool.aspx
6. 重疊IO操作:
http://hi.baidu.com/soulshape/blog/item/5ba8eec80034d91e7e3e6f7a.html
// overlapped.cpp : 定義控制台應用程式的進入點。<br />//<br />#include "stdafx.h"<br />#pragma comment(lib,"ws2_32.lib")<br />#include <winsock2.h><br />#include <stdio.h><br />#define DATA_BUFSIZE 1024 // 接收緩衝區大小<br />SOCKET ListenSocket,<br />AcceptSocket[DATA_BUFSIZE] = {0};<br />WSABUF DataBuf[DATA_BUFSIZE];<br />WSAOVERLAPPED Overlapped[DATA_BUFSIZE]; // 重疊結構<br />WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS]; // 用來通知重疊操作完成的事件控制代碼數組<br />DWORD dwRecvBytes = 0, // 接收到的字元長度<br />Flags = 0; // WSARecv的參數<br />DWORD volatile dwEventTotal = 0; // 程式中事件的總數<br />//由於EVENT數量限制,目前最多隻能支援64個串連<br />DWORD WINAPI AcceptThread(LPVOID lpParameter)<br />{<br />WSADATA wsaData;<br />WSAStartup(MAKEWORD(2,2),&wsaData);<br />ListenSocket = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,NULL,WSA_FLAG_OVERLAPPED);<br />SOCKADDR_IN ServerAddr;<br />ServerAddr.sin_family = AF_INET;<br />ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);<br />ServerAddr.sin_port = htons(1234);<br />bind(ListenSocket,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr));<br />listen(ListenSocket,100);<br />printf("listenning.../n");<br />int i = 0;<br />SOCKADDR_IN ClientAddr;<br />int addr_length=sizeof(ClientAddr);<br />while (TRUE)<br />{<br />while((AcceptSocket[i] == 0) && (AcceptSocket[i] = accept(ListenSocket,(SOCKADDR*)&ClientAddr, &addr_length)) != INVALID_SOCKET)<br />{<br />printf("accept %d ip:%s port:%d/n",i+1,inet_ntoa(ClientAddr.sin_addr),ClientAddr.sin_port);<br />EventArray[i] = WSACreateEvent();<br />dwEventTotal++;<br />memset(&Overlapped[i],0,sizeof(WSAOVERLAPPED));<br />Overlapped[i].hEvent = EventArray[i];<br />char * buffer = new char[DATA_BUFSIZE];<br />memset(buffer,0,DATA_BUFSIZE);<br />DataBuf[i].buf = buffer;<br />DataBuf[i].len = DATA_BUFSIZE;<br />if(WSARecv(AcceptSocket[i], &DataBuf[i], dwEventTotal, &dwRecvBytes, &Flags, &Overlapped[i], NULL) == SOCKET_ERROR)<br />{<br />int err = WSAGetLastError();<br />if(WSAGetLastError() != WSA_IO_PENDING)<br />{<br />printf("disconnect: %d/n",i+1);<br />closesocket(AcceptSocket[i]);<br />AcceptSocket[i] = 0;<br />//WSACloseEvent(EventArray[i]); // 關閉事件<br />DataBuf[i].buf = NULL;<br />DataBuf[i].len = NULL;<br />continue;<br />}<br />}<br />i = (i+1)%WSA_MAXIMUM_WAIT_EVENTS;<br />}<br />}<br />return FALSE;<br />}<br />DWORD WINAPI ReceiveThread(LPVOID lpParameter)<br />{<br />DWORD dwIndex = 0;<br />while (true)<br />{<br />dwIndex = WSAWaitForMultipleEvents(dwEventTotal, EventArray, FALSE, 1000, FALSE);<br />if (dwIndex == WSA_WAIT_FAILED || dwIndex == WSA_WAIT_TIMEOUT)<br />continue;<br />dwIndex = dwIndex - WSA_WAIT_EVENT_0;<br />WSAResetEvent(EventArray[dwIndex]);<br />DWORD dwBytesTransferred;<br />WSAGetOverlappedResult( AcceptSocket[dwIndex], &Overlapped[dwIndex], &dwBytesTransferred, FALSE, &Flags);<br />//first check whethre peer has closed the connection, and if so, close the socket.<br />if(dwBytesTransferred == 0)<br />{<br />printf("disconnect: %d/n",dwIndex+1);<br />closesocket(AcceptSocket[dwIndex]);<br />AcceptSocket[dwIndex] = 0;<br />WSACloseEvent(EventArray[dwIndex - WSA_WAIT_EVENT_0]); // 關閉事件<br />DataBuf[dwIndex].buf = NULL;<br />DataBuf[dwIndex].len = NULL;<br />continue;<br />}<br />//使用資料<br />printf("%s/n",DataBuf[dwIndex].buf);<br />memset(DataBuf[dwIndex].buf,0,DATA_BUFSIZE);<br />if(WSARecv(AcceptSocket[dwIndex], &DataBuf[dwIndex], dwEventTotal, &dwRecvBytes, &Flags, &Overlapped[dwIndex], NULL) == SOCKET_ERROR)<br />{<br />if(WSAGetLastError() != WSA_IO_PENDING)<br />{<br />printf("disconnect: %d/n",dwIndex+1);<br />closesocket(AcceptSocket[dwIndex]);<br />AcceptSocket[dwIndex] = 0;<br />//WSACloseEvent(EventArray[dwIndex]); // 關閉事件<br />DataBuf[dwIndex].buf = NULL;<br />DataBuf[dwIndex].len = NULL;<br />continue;<br />}<br />}<br />}<br />return FALSE;<br />}<br />void main()<br />{<br />HANDLE hThreads[2];<br />hThreads[0] = CreateThread(NULL, 0, AcceptThread, NULL, NULL, NULL);<br />hThreads[1] = CreateThread(NULL, 0, ReceiveThread, NULL, NULL, NULL);<br />WaitForMultipleObjects(2,hThreads,TRUE,INFINITE);<br />printf("exit/n");<br />CloseHandle(hThreads[0]);<br />CloseHandle(hThreads[1]);<br />}<br />
7.