青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

concentrate on c/c++ related technology

plan,refactor,daily-build, self-discipline,

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

常用鏈接

留言簿(9)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

1) 使用windows 頭文件
API 頭文件允許32位和64位應用程序,包含了ANSI版本和UNICODE版本的聲明。
如果安裝更新SDK的話,那么就可能有頭文件的多個版本在機器上面。
一些函數(shù)的使用可能會通過使用條件編譯代碼依賴于某個特定版本的操作系統(tǒng),為了編譯成功,你得定義比較合適的macro.頭文件使用宏來指示哪個版本系統(tǒng)支持編程元素。
http://msdn2.microsoft.com/en-us/library/aa383745(VS.85).aspx
2) 初始化類中的成員模板
i) 使用非模板的方式
template <typename Argtype>
class Option
{
public:
Option( void (*func_name)(Argtype), Argtype Arg1 )
  : MenuFunction<Argtype>( (*func_name)(Argtype), Argtype Arg1 )
 {
 } 
private:
 MenuFunction<Argtype> function;
};
template <typename Argtype>
Option<Argtype> makeOption(void (*func_name)(Argtype), Argtype Arg1 )
{
return Option<Argtype>(func_name, Arg1);
}

ii) 使用多態(tài)
class Option
{
private:
class FunctionBase
{
public:
virtual ~FunctionBase() {}
virtual void call() = 0;
};

template <typename Argtype>
class Function : public FunctionBase
{
public:
Function(void (*func_name)(Argtype), Argtype arg) :
m_func(func_name, arg)
{
}
void call()
{
m_func(); // or whatever
}
private:
MenuFunction<Argtype> m_func;
};

public:
template<typename Argtype> Option( void (*func_name)(Argtype), Argtype Arg1 )
{
 // of course, this means you need a destructor, copy constructor, and assignment operator
// function->call() would invoke the function
function = new Function<Argtype>(func_name, Arg1);

}  
FunctionBase * function;
};
3 大小寫字符串比較大小(考慮區(qū)域性語言的問題)
#include <iostream>
#include<algorithm>
#include<functional>
#include<boost/bind.hpp>
#include<string>
#include<locale>

struct CaseSensitiveString
{
  public:
       bool operator()(const std::string & lhs,const std::string & rhs)
       {
              std::string lhs_lower;
              std::string rhs_lower;
              std::transform(lhs.begin(),lhs.end(),std::back_inserter(lhs_lower),bind(std::tolower<char>,_1,_loc));
              std::transform(rhs.begin(),rhs.end(),std::back_inserter(rhs_lower),bind(std::tolower<char>,_1,_loc));
              return lhs_lower < rhs_lower;
       }
      CaseSensitiveString(const std::locale & loc):_loc(loc){}
     private:
       std::locale _loc;
};
詳細內(nèi)容見:
http://learningcppisfun.blogspot.com/2008/04/case-insensitive-string-comparison.html

4 找不到msctf.h問題
在用DX自帶的dxut做界面程序的時候,整個程序編制下來就出現(xiàn)了這個錯誤
fatal error C1083: Cannot open include file: 'msctf.h': No such file or directory
很詭異的,在dxsdk里面也找不到,想了很久,才發(fā)現(xiàn)自己沒有安裝platform sdk.因為win32程序之類的,最好都要安裝這些sdk之類的。具體的信息可以在這里得到
http://www.gamedev.net/community/forums/topic.asp?topic_id=481358
5 重載 , 覆蓋,隱藏
重載與覆蓋有以下的區(qū)別:
重載:同一類,相同函數(shù)名,不同函數(shù)參數(shù),不一定要有virtual 關(guān)鍵字
覆蓋:子類和父類,相同函數(shù)名,  相同函數(shù)參數(shù),一定要有virtual 關(guān)鍵字
隱藏:1)如果派生類的函數(shù)名與基類的函數(shù)名相同,但是參數(shù)不同,不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(與重載區(qū)別開來)
            2)如果派生類的函數(shù)名與基類的函數(shù)名相同,并且參數(shù)相同,但是基類沒有virtual關(guān)鍵字,基類的函數(shù)將被隱藏(與覆蓋區(qū)別開來)
6 快速加載文件
在游戲里面,一般對從硬盤或者DVD加載資源要求比較高的,一般采用這樣的方法:

for(int i = 0; < NumBlocks; i++)
{
   // VirtualAlloc() creates storage that is page aligned
   // and so is disk sector aligned
   blocks[i] = static_cast<char *>
      (VirtualAlloc(0, BlockSize, MEM_COMMIT, PAGE_READWRITE));

   ZeroMemory(&overlapped[i], sizeof(OVERLAPPED));
   overlapped[i].hEvent = CreateEvent(0, false, false, 0);
}

HANDLE hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING |
   FILE_FLAG_OVERLAPPED | FILE_FLAG_SEQUENTIAL_SCAN, 0);

int iWriterPos = 0;
int iReaderPos = 0;
int iIOPos = 0;
int iPos = 0;

do
{
   while(iWriterPos - iReaderPos != NumBlocks && iIOPos < FileSize)
   {
      overlapped[iWriterPos & NumBlocksMask].Offset = iIOPos;

      int iLeft = FileSize - iIOPos;
      int iBytesToRead = iLeft > BlockSize ? BlockSize: iLeft;

      const int iMaskedWriterPos = iWriterPos & NumBlocksMask;
      ReadFile(hFile, blocks[iMaskedWriterPos], iBytesToRead, 0,
         &overlapped[iMaskedWriterPos]);

      iWriterPos++;
      iIOPos += iBytesToRead;
   }

   const int iMaskedReaderPos = iReaderPos & NumBlocksMask;

   WaitForSingleObject(overlapped[iMaskedReaderPos].hEvent, INFINITE);

   int iLeft = FileSize - iPos;
   int iBytesToRead = iLeft > BlockSize ? BlockSize: iLeft;

   memcpy(&g_buffer[iPos], blocks[iMaskedReaderPos], iBytesToRead);

   iReaderPos++;
   iPos += iBytesToRead;

}
while(iPos < FileSize);

CloseHandle(hFile);

for(int i = 0; i < NumBlocks; i++)
{
   VirtualFree(blocks[i], BlockSize, MEM_COMMIT);
   CloseHandle(overlapped[i].hEvent);
}

char* s vs char s[]
char s1[] = "abcd";// 定義一個未指定長度的char型數(shù)組,并使用字符串"abcd"將之初始化
char *s2  = "abcd";// 定義一個char型指針,并將其指向字符串"abcd",該字串位于靜態(tài)存儲區(qū)

s1[0] = 'm';// 無編譯期、運行期錯誤
s2[0] = 'm';// 無編譯器錯誤,但運行期試圖修改靜態(tài)內(nèi)存,所以發(fā)生運行期錯誤
char s*只是被賦予了一個指針,char s[]是在棧中重新開辟了空間,可以在程序中寫,而不引起程序崩潰。
所以相比較而言,使用字符串數(shù)組要比字符指針要安全的多,要慎用char*s 和char s[].
7 can not find MSVCR80.dll
在安裝了vc2005之后,發(fā)現(xiàn)錯誤報告說MSVCR80.dll,以為又要重新安裝vc2005了,但是在網(wǎng)絡上面搜索到另外一個例子說,其實可以不用安裝vc2005,直接改變配置就好了,于是就有這個了:
http://blogs.msdn.com/seshadripv/archive/2005/10/30/486985.aspx
http://www.codeguru.com/forum/showthread.php?t=439964
工程架構(gòu):
新建一個空白的 solution.
然后在新建的solution上面添加vcproject.
并且也可以在子空白solution上面添加vcproject.

1>        ]
1>正在編譯資源...
1>正在鏈接...
1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/OPT:ICF”規(guī)范)
1>fatal error C1900: Il mismatch between 'P1' version '20060201' and 'P2' version '20050411'
1>LINK : fatal error LNK1257: 代碼生成失敗
1>生成日志保存在“file://e:\demo-work\LocalVersionTianJi\_out\DragoonApp\Release\BuildLog.htm”
1>DragoonApp - 1 個錯誤,5382 個警告
========== 全部重新生成: 0 已成功, 1 已失敗, 0 已跳過 ==========

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1512436&SiteID=1
http://forum.codecall.net/c-c/6244-fatal-error-c1900-il-mismatch-between-p1-version-20060201-p2-version-2005-a.html
http://www.codeguru.com/forum/archive/index.php/t-144030.html

timeGetTime: 頭文件 mmsystem.h,庫文件 winmm.lib
獲得當前窗口的句柄。
HWND hwnd=::GetForegroundWindow();
hwnd就保存了當前系統(tǒng)的最頂層窗口的句柄
GetSafehWnd 取你程序所在窗口類的句柄
GetActiveWindow 取當前活動窗口句柄
AfxGetMainWnd 取主窗口句柄
GetForegroundWindow 取前臺窗口句柄
FindWindow
EnumWindow
改變窗口屬性:
SetWindowLong
SetClassLong.

strcpy strncpy memcpy.
strcpy:按照msdn的話說是:No overflow checking is performed when strings are copied or appended,即沒有嚴格的長度檢查,所以即使是溢出也無法被檢查出來,以及The behavior of strcpy is undefined if the source and destination strings overlap.

strncpy:雖然加入了size這個來限制,但是這個size小于或者等于字符長度的話,那么該信息是不被加上字符串結(jié)束符的.并且仍舊存在跟strcpy一樣的問題, The behavior of strncpy is undefined if the source and destination strings overlap

memcpy:具體的用法跟strncpy類似,也加入了size的成分在里面,但是卻比strncpy好用得多.

If the source and destination overlap, this function does not ensure that the original source characters in the overlapping region are copied before being overwritten.

Use memmove to handle overlapping regions.

顯然它能夠處理重疊的部分,安全可靠.
并且:

The first argument, dest, must be large enough to hold count characters of src; otherwise, a buffer overrun can occur.


上次遇到的問題是我將一串漢字用strcpy來拷貝到緩沖里面,結(jié)果發(fā)現(xiàn)出現(xiàn)了亂碼.
strncpy, strcpy還是建議少用,換用memcpy+memmove(如果存在重疊的情況)吧:)
未完待續(xù).

posted on 2008-05-12 10:01 jolley 閱讀(2765) 評論(1)  編輯 收藏 引用

Feedback

# re: 大雜燴 2012-04-30 21:12 陳明澤
請教:fatal error LNK1257: 代碼生成失敗如何解決呢?  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲在线视频网站| 韩国v欧美v日本v亚洲v| 欧美freesex8一10精品| 亚洲国产精品成人综合| 亚洲欧洲精品成人久久奇米网| 性欧美暴力猛交69hd| 午夜久久黄色| 一区二区三区四区五区精品| 国产欧美精品在线观看| 国产精品扒开腿做爽爽爽软件| 久久久久久69| 久久久免费观看视频| 久久伊人亚洲| 欧美精品一区三区| 欧美午夜无遮挡| 欧美视频在线一区| 国产精品免费视频xxxx| 国产精品美女久久久久久2018 | 久久成人免费| 欧美成人免费视频| 亚洲精品永久免费精品| 久久五月婷婷丁香社区| 欧美激情小视频| 欧美日韩日本视频| 好看不卡的中文字幕| 亚洲老板91色精品久久| 久久本道综合色狠狠五月| 免费一区视频| 99成人在线| 免费观看30秒视频久久| 宅男噜噜噜66一区二区66| 久久久久久久999精品视频| 欧美激情久久久久久| 好吊视频一区二区三区四区 | 欧美韩日一区二区三区| 国产精品久久久免费| 亚洲精品护士| 亚洲电影欧美电影有声小说| 亚洲欧洲一区二区三区久久| 欧美一区二区三区免费观看| 欧美成人激情视频| 亚洲第一网站| 亚洲国产成人tv| 欧美成人精品在线| 亚洲第一在线综合在线| 欧美日韩一区二区三区在线看| 免费观看成人| 欧美一区二区三区免费看 | 亚洲欧洲综合| 欧美女同视频| 亚洲深夜福利视频| 亚洲一区二区三区免费观看| 国产精品黄色| 牛牛精品成人免费视频| 欧美—级a级欧美特级ar全黄| 亚洲人成网站在线观看播放| 91久久精品美女高潮| 欧美精品一区在线| 欧美日韩精品一区二区| 亚洲已满18点击进入久久| 亚洲免费在线电影| 亚洲丁香婷深爱综合| 亚洲美女色禁图| 精品福利电影| 亚洲美女精品久久| 精品成人一区二区三区四区| 亚洲精品中文字幕女同| 国产主播一区二区三区| 亚洲精品一区中文| 亚洲高清中文字幕| 久久精品99久久香蕉国产色戒| 国产一二精品视频| 亚洲国产精品一区| 国产精品欧美一区二区三区奶水 | 欧美亚男人的天堂| 久久精品国产亚洲高清剧情介绍 | 欧美激情久久久久久| 亚洲一区中文字幕在线观看| 欧美a一区二区| 欧美成人午夜剧场免费观看| 欧美激情一区二区| 免费成人高清| 亚洲精品免费在线播放| 欧美成va人片在线观看| 亚洲国产精品99久久久久久久久| 国产精品一二三| 欧美一区二区三区视频| 久久综合福利| 欧美一级成年大片在线观看| 亚洲美女av黄| 亚洲日韩欧美视频| 欧美激情一二区| 亚洲高清一二三区| 男人天堂欧美日韩| 久久亚洲一区二区三区四区| 国产日本欧美一区二区三区在线| 亚洲在线一区| 午夜欧美不卡精品aaaaa| 国产精品久久久久久久久婷婷| 亚洲欧美卡通另类91av| 欧美激情一区二区三区全黄| 亚洲精品一级| 国产又爽又黄的激情精品视频 | 亚洲日本视频| 亚洲新中文字幕| 亚洲电影在线播放| 欧美婷婷在线| 久久嫩草精品久久久精品一| av不卡免费看| 亚洲电影专区| 欧美成人情趣视频| 欧美专区在线| 欧美一区二区三区视频免费播放 | 亚洲精品欧美激情| 国产亚洲成av人在线观看导航| 久久在线视频| 欧美影院午夜播放| 欧美一区二区观看视频| 亚洲天天影视| 亚洲永久网站| 欧美中文字幕在线视频| 亚洲女ⅴideoshd黑人| 夜夜嗨av色综合久久久综合网| 欧美激情亚洲精品| 欧美大成色www永久网站婷| 久久国产欧美| 国产精品国内视频| 国产精品久久久久久久久久尿| 欧美v国产在线一区二区三区| 免费人成精品欧美精品| 欧美freesex交免费视频| 欧美精品激情| 欧美午夜不卡视频| 伊人久久男人天堂| 在线视频一区二区| 欧美一区二区三区电影在线观看| 狠狠色丁香久久综合频道| 美女脱光内衣内裤视频久久影院| 久久精品最新地址| 国产精品推荐精品| 在线精品国精品国产尤物884a| 亚洲电影免费观看高清| 在线一区二区视频| 久久99在线观看| 日韩视频永久免费| 久久久久久久尹人综合网亚洲| 欧美精品在线网站| 国产自产精品| 亚洲午夜久久久久久尤物 | 久久综合狠狠| 久久综合网hezyo| 国产欧美一区二区三区国产幕精品| 在线国产精品一区| 欧美淫片网站| 亚洲高清不卡av| 久久er精品视频| 国产色视频一区| 欧美一区二区三区视频| 亚洲精品免费网站| 欧美精品久久久久久久久久| 亚洲精品视频免费| 亚洲精品视频一区| 欧美日韩无遮挡| 亚洲视频在线观看网站| 夜夜嗨av一区二区三区四区 | 亚洲免费av网站| 免费在线观看一区二区| 亚洲欧美精品伊人久久| 国产欧美日韩专区发布| 久久只精品国产| 久热爱精品视频线路一| 日韩视频免费观看高清在线视频| 亚洲黄色小视频| 国产精品久久福利| 一区二区三区免费在线观看| 亚洲精品美女久久久久| 欧美日韩一区二区三区高清| 性亚洲最疯狂xxxx高清| 久久综合亚州| 香蕉尹人综合在线观看| 欧美高清视频在线| 久久视频在线视频| 欧美日韩精品免费观看| 久久精品91久久久久久再现| 快播亚洲色图| 欧美一级欧美一级在线播放| 亚洲欧美日韩天堂| 亚洲乱码国产乱码精品精天堂| 午夜精彩视频在线观看不卡| 亚洲日韩欧美视频一区| 久久久五月婷婷| 久久成人国产精品| 狠狠干综合网| 美女任你摸久久| 快射av在线播放一区| 久久精品国产第一区二区三区| 欧美午夜大胆人体| 一本久久综合亚洲鲁鲁| 亚洲午夜精品| 国精品一区二区|