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

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>
            久久久久九九视频| 亚洲深夜av| 久久久久国产精品厨房| 午夜精品久久久久久久蜜桃app| 欧美三级午夜理伦三级中视频| 99天天综合性| 亚洲国产综合91精品麻豆| 欧美不卡激情三级在线观看| 一本久道久久久| 宅男精品视频| 国产在线日韩| 亚洲欧洲日产国产网站| 欧美日韩午夜视频在线观看| 欧美影院在线| 久久中文精品| 亚洲视频狠狠| 欧美制服丝袜第一页| 亚洲理伦在线| 亚洲欧美久久久| 亚洲黄色影片| 亚洲天堂免费观看| 亚洲高清视频在线观看| 这里只有精品视频| 在线观看国产欧美| 99精品热6080yy久久| 国产亚洲综合在线| 99xxxx成人网| 国产在线乱码一区二区三区| 亚洲精品日韩在线观看| 国产色婷婷国产综合在线理论片a| 欧美成人性网| 免费观看日韩av| 欧美日韩aaaaa| 欧美www在线| 国产日韩在线不卡| 亚洲精品极品| 伊人成年综合电影网| 亚洲图片欧美午夜| 在线国产日韩| 欧美一区二区三区电影在线观看| 亚洲黄色性网站| 久久国内精品自在自线400部| 亚洲午夜在线观看视频在线| 农夫在线精品视频免费观看| 欧美中文字幕精品| 国产精品啊啊啊| 亚洲福利在线观看| 亚洲国产精品www| 欧美在线一二三区| 久久福利视频导航| 国产精品www网站| 99re6这里只有精品视频在线观看| 亚洲国产精品成人一区二区 | 一区二区三区高清| 久热精品视频在线观看一区| 久久久亚洲综合| 国产色综合久久| 欧美夜福利tv在线| 欧美在线综合| 国产伦精品一区二区三区高清| 日韩视频免费观看高清在线视频| 最新成人av网站| 猫咪成人在线观看| 国产婷婷色一区二区三区在线| 亚洲精品免费一二三区| 亚洲伦理自拍| 欧美激情综合亚洲一二区| 亚洲国产成人精品女人久久久| 伊人久久婷婷色综合98网| 久久丁香综合五月国产三级网站| 久久精品国产2020观看福利| 国产欧美日韩综合精品二区| 亚洲女同精品视频| 欧美一区二区日韩| 国产一区二区电影在线观看| 久久精品视频网| 欧美成人国产va精品日本一级| 亚洲国产日韩精品| 欧美啪啪成人vr| 中文在线一区| 久久精品免费播放| 亚洲激情第一页| 欧美网站在线观看| 午夜天堂精品久久久久| 老司机午夜精品视频| 亚洲美女啪啪| 国产精品丝袜白浆摸在线| 久久精品青青大伊人av| 欧美成人久久| 在线亚洲精品福利网址导航| 国产伦精品一区二区三区高清版 | 久久久久欧美精品| 亚洲国产精品视频| 亚洲欧美在线aaa| 亚洲国产美国国产综合一区二区| 欧美激情综合在线| 欧美一级大片在线观看| 欧美成人一品| 亚洲欧美激情诱惑| 亚洲高清电影| 国产精品亚洲综合久久| 久久综合一区二区| 亚洲天堂男人| 亚洲福利在线视频| 久久精品主播| 宅男精品导航| 亚洲国产成人av在线| 国产精品夜色7777狼人| 欧美sm视频| 久久精品综合一区| 亚洲精品三级| 麻豆精品视频在线观看| 亚洲综合好骚| 亚洲另类在线视频| 狠狠色噜噜狠狠色综合久| 欧美手机在线| 欧美国产专区| 久久久综合激的五月天| 亚洲女人天堂成人av在线| 亚洲免费大片| 亚洲第一精品夜夜躁人人躁 | 亚洲欧洲视频| 一区二区三区在线观看欧美| 国产精品久久久久91| 欧美精品色网| 欧美福利视频在线| 美女日韩在线中文字幕| 欧美一级电影久久| 中文一区二区在线观看| 99精品国产一区二区青青牛奶| 欧美电影免费观看高清完整版| 久久一区中文字幕| 久久欧美肥婆一二区| 久久av一区二区三区亚洲| 亚洲欧美日韩国产另类专区| 日韩亚洲欧美一区二区三区| 亚洲欧洲日韩在线| 亚洲精品视频在线看| 日韩亚洲视频| 亚洲一级黄色片| 中文一区在线| 午夜在线成人av| 午夜视频一区在线观看| 午夜激情亚洲| 性欧美8khd高清极品| 欧美亚洲日本国产| 欧美一区二区在线看| 久久精品国产一区二区三区| 久久精品理论片| 美女视频一区免费观看| 免费久久99精品国产自| 欧美国产乱视频| 亚洲国产高清一区| 日韩视频在线一区| 正在播放亚洲一区| 香蕉精品999视频一区二区| 性色av一区二区三区| 久久精品国产在热久久| 久久一区国产| 欧美欧美午夜aⅴ在线观看| 国产精品久久久久久模特| 国产精品男女猛烈高潮激情 | 免费短视频成人日韩| 欧美一区二区三区免费大片| 久久久久久网站| 亚洲国产精品视频| 亚洲尤物在线| 久久久精品动漫| 欧美日韩成人在线播放| 国产农村妇女精品一区二区| 亚洲电影自拍| 亚洲欧美日韩国产中文在线| 久久久久久自在自线| 亚洲成人在线视频播放| 宅男精品视频| 蜜臀av一级做a爰片久久| 国产精品hd| 亚洲第一页自拍| 亚洲欧美在线磁力| 亚洲国产高清aⅴ视频| 亚洲欧美日韩精品在线| 欧美成人免费播放| 国产美女精品免费电影| 亚洲精品久久久久| 久久久综合激的五月天| 99视频在线观看一区三区| 久久精品一二三| 欧美特黄一区| 亚洲精品日韩在线| 久久综合伊人| 亚洲欧美在线免费观看| 欧美精品入口| 亚洲国产一区二区在线| 久久久91精品| 亚洲男人第一av网站| 欧美精品一卡| 亚洲国产精品一区制服丝袜| 久久都是精品| 亚洲免费中文| 国产精品久久久久久久久久久久久久 |