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

concentrate on c/c++ related technology

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

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

常用鏈接

留言簿(9)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

1) 使用windows 頭文件
API 頭文件允許32位和64位應用程序,包含了ANSI版本和UNICODE版本的聲明。
如果安裝更新SDK的話,那么就可能有頭文件的多個版本在機器上面。
一些函數的使用可能會通過使用條件編譯代碼依賴于某個特定版本的操作系統,為了編譯成功,你得定義比較合適的macro.頭文件使用宏來指示哪個版本系統支持編程元素。
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) 使用多態
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 大小寫字符串比較大小(考慮區域性語言的問題)
#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;
};
詳細內容見:
http://learningcppisfun.blogspot.com/2008/04/case-insensitive-string-comparison.html

4 找不到msctf.h問題
在用DX自帶的dxut做界面程序的時候,整個程序編制下來就出現了這個錯誤
fatal error C1083: Cannot open include file: 'msctf.h': No such file or directory
很詭異的,在dxsdk里面也找不到,想了很久,才發現自己沒有安裝platform sdk.因為win32程序之類的,最好都要安裝這些sdk之類的。具體的信息可以在這里得到
http://www.gamedev.net/community/forums/topic.asp?topic_id=481358
5 重載 , 覆蓋,隱藏
重載與覆蓋有以下的區別:
重載:同一類,相同函數名,不同函數參數,不一定要有virtual 關鍵字
覆蓋:子類和父類,相同函數名,  相同函數參數,一定要有virtual 關鍵字
隱藏:1)如果派生類的函數名與基類的函數名相同,但是參數不同,不論有無virtual關鍵字,基類的函數將被隱藏(與重載區別開來)
            2)如果派生類的函數名與基類的函數名相同,并且參數相同,但是基類沒有virtual關鍵字,基類的函數將被隱藏(與覆蓋區別開來)
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型數組,并使用字符串"abcd"將之初始化
char *s2  = "abcd";// 定義一個char型指針,并將其指向字符串"abcd",該字串位于靜態存儲區

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

1>        ]
1>正在編譯資源...
1>正在鏈接...
1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/OPT:ICF”規范)
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就保存了當前系統的最頂層窗口的句柄
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小于或者等于字符長度的話,那么該信息是不被加上字符串結束符的.并且仍舊存在跟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來拷貝到緩沖里面,結果發現出現了亂碼.
strncpy, strcpy還是建議少用,換用memcpy+memmove(如果存在重疊的情況)吧:)
未完待續.

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

Feedback

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 久久九九电影| 免费亚洲电影在线观看| 猛男gaygay欧美视频| 久久综合伊人77777| 美女91精品| 亚洲福利视频在线| 国产精品美女在线观看| 欧美日韩国产综合久久| 国产精品久久久久99| 国产综合色在线视频区| 亚洲精品久久久一区二区三区| 亚洲视频观看| 久久久亚洲欧洲日产国码αv| 欧美成人tv| 伊人久久亚洲热| 在线综合亚洲欧美在线视频| 久久大香伊蕉在人线观看热2| 麻豆九一精品爱看视频在线观看免费| 亚洲茄子视频| 久久精品国产69国产精品亚洲| 欧美激情一级片一区二区| 国产精品入口日韩视频大尺度| 在线观看中文字幕亚洲| 国产欧美一区二区色老头| 亚洲二区视频| 亚洲一区二区三区高清| 久久久综合免费视频| 日韩视频免费大全中文字幕| 久久精品国产免费观看| 欧美日韩在线视频首页| 精品动漫一区二区| 亚洲一级高清| 亚洲国产欧美一区二区三区丁香婷| 亚洲婷婷国产精品电影人久久| 久久人人爽人人爽| 国产欧美不卡| 亚洲女女女同性video| 亚洲国产精品一区制服丝袜 | 欧美一区2区三区4区公司二百| 久久亚洲一区| 国产欧美日韩在线观看| 亚洲性视频h| 亚洲人成网站影音先锋播放| 久久久久久久久综合| 国产免费观看久久| 亚洲伊人一本大道中文字幕| 亚洲激情国产| 久久人人97超碰人人澡爱香蕉| 国产亚洲毛片| 久久免费国产精品| 欧美在线观看视频| 国产午夜精品全部视频播放| 亚洲午夜精品一区二区| 亚洲品质自拍| 欧美日韩国产专区| 亚洲图片在区色| 亚洲深夜福利在线| 国产精品影音先锋| 亚洲一区在线免费观看| 日韩亚洲欧美成人| 国产精品大片| 亚洲欧美在线高清| 中国成人亚色综合网站| 国产精品久久久久影院色老大| 亚洲四色影视在线观看| 最新日韩欧美| 国产精品v一区二区三区| 亚洲在线中文字幕| 午夜精品久久久久久久久久久| 国产麻豆精品久久一二三| 久久精品国产一区二区三区| 欧美一区二区啪啪| 一区视频在线看| 亚洲二区在线观看| 欧美特黄视频| 久久精品视频在线看| 久久久久久久欧美精品| 亚洲精品国产无天堂网2021| 亚洲欧洲精品一区二区三区不卡 | 欧美亚洲在线| 国产日韩一区二区| 久久亚洲美女| 欧美国产日韩一二三区| 一本色道久久综合亚洲二区三区| 99国产成+人+综合+亚洲欧美| 国产精品mv在线观看| 久久激情视频| 欧美精品一区二区三区在线看午夜 | 国产精品久久久久久久久久妞妞| 中文欧美在线视频| 欧美在线视频日韩| 99精品欧美一区| 欧美夜福利tv在线| 一区在线影院| 最新高清无码专区| 国产目拍亚洲精品99久久精品| 女人香蕉久久**毛片精品| 欧美日韩亚洲一区| 久久在线播放| 欧美三区免费完整视频在线观看| 亚洲视频图片小说| 久久www免费人成看片高清| 一本色道久久| 久久久久久色| 香蕉亚洲视频| 欧美国产三区| 免费欧美网站| 国产精品一卡二卡| 亚洲人成网站999久久久综合| 国内揄拍国内精品少妇国语| 亚洲国产一区二区三区青草影视| 国产精品久久久久毛片大屁完整版| 麻豆av一区二区三区久久| 国产精品美女久久久浪潮软件 | 在线视频国内自拍亚洲视频| 99这里有精品| 99精品欧美一区二区三区| 久久精品首页| 久久精品国产清高在天天线| 国产精品久久久久久久午夜片 | 久久国产欧美| 性久久久久久久| 欧美性猛交xxxx乱大交退制版 | 欧美激情精品久久久久| 国产香蕉97碰碰久久人人| 亚洲一区激情| 午夜精品999| 国产精品乱看| 亚洲性色视频| 亚欧成人在线| 国产欧美日韩精品一区| 午夜精品视频一区| 久久综合伊人| 亚洲人成人一区二区三区| 国产日韩欧美制服另类| 亚洲先锋成人| 久久狠狠亚洲综合| 国产在线国偷精品产拍免费yy| 亚洲自拍啪啪| 久久大香伊蕉在人线观看热2| 国产亚洲欧美一区在线观看| 欧美尤物巨大精品爽| 久久综合久久综合久久综合| 在线观看av一区| 欧美成人一区在线| 亚洲茄子视频| 午夜久久tv| 狠狠色伊人亚洲综合成人| 久久综合色婷婷| 亚洲精品永久免费精品| 亚洲中字在线| 国产在线拍偷自揄拍精品| 久久综合九色综合网站| 亚洲日韩中文字幕在线播放| 在线亚洲电影| 国产亚洲欧美色| 欧美成人国产一区二区| 一区二区久久久久| 久久久久久久综合狠狠综合| 亚洲高清视频一区二区| 欧美日韩一区三区四区| 欧美一区二区三区另类| 欧美高清在线观看| 亚洲在线黄色| 国产一区在线看| 欧美国产一区二区在线观看| 亚洲一级片在线观看| 蜜桃久久av一区| 亚洲一级二级在线| 亚洲激情视频网| 国产日韩精品视频一区| 欧美夫妇交换俱乐部在线观看| 亚洲一区免费观看| 亚洲高清视频一区| 欧美专区在线观看一区| 日韩视频在线播放| 国产手机视频精品| 欧美日韩精品二区第二页| 久久av免费一区| 日韩视频二区| 欧美激情欧美激情在线五月| 欧美一区国产二区| 亚洲看片网站| 亚洲国产高清aⅴ视频| 国产欧美视频一区二区三区| 欧美高清hd18日本| 久久黄色网页| 亚洲免费一在线| 夜夜嗨av一区二区三区四区| 模特精品裸拍一区| 久久大逼视频| 欧美在线视频一区| 亚洲欧美国产高清| 一区二区三区四区国产| 亚洲毛片一区二区| 亚洲精品免费观看| 1769国产精品|