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

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 閱讀(2767) 評論(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>
            亚洲综合另类| 一本色道久久综合亚洲精品不| 亚洲一区在线免费观看| 在线亚洲观看| 国产女优一区| 免费久久精品视频| 欧美成黄导航| 亚洲女同精品视频| 亚洲欧美日韩一区在线| 娇妻被交换粗又大又硬视频欧美| 麻豆国产va免费精品高清在线| 蜜臀av在线播放一区二区三区| 在线一区二区日韩| 欧美一级淫片aaaaaaa视频| 91久久精品国产| 国产精品99久久久久久久久久久久 | 亚洲成人在线网| 亚洲欧洲日韩综合二区| 国产精品久久久久av免费| 久久三级视频| 欧美午夜电影一区| 欧美成人一区二区| 国产精品久久久久毛片大屁完整版 | 国产综合自拍| 99国产一区| 国产一区三区三区| 亚洲免费观看高清完整版在线观看| 国产精品亚洲综合色区韩国| 欧美a级一区| 国产精品稀缺呦系列在线| 欧美黄色免费网站| 国产一区二区三区四区| 亚洲人人精品| 在线免费日韩片| 欧美亚洲综合久久| 在线一区二区日韩| 老司机精品视频一区二区三区| 欧美在线在线| 国产精品xvideos88| 亚洲国产成人av好男人在线观看| 国产美女高潮久久白浆| 亚洲三级色网| 最新日韩精品| 久久免费视频网| 久久久久久伊人| 国产日产欧产精品推荐色| 99国产精品久久久久久久久久| 亚洲高清资源综合久久精品| 性久久久久久久| 欧美一区二区三区在线| 国产精品伦一区| av72成人在线| 在线综合欧美| 欧美久久久久久久久久| 亚洲国产一区二区视频| 亚洲国产成人高清精品| 久久久久国产精品人| 久久久久九九九九| 激情欧美一区二区三区在线观看| 午夜在线a亚洲v天堂网2018| 性欧美超级视频| 国产精品一区二区在线观看不卡 | aa国产精品| 午夜精品一区二区三区在线| 亚洲午夜成aⅴ人片| 亚洲欧美大片| 国产区日韩欧美| 久久精品人人做人人综合| 久久久久久久999精品视频| 国产一区观看| 免费日韩一区二区| 亚洲精品影视| 午夜一区在线| 一区国产精品| 免费亚洲婷婷| 一本色道久久88综合亚洲精品ⅰ| 性欧美videos另类喷潮| 国内视频一区| 欧美电影免费| 一区二区三区精品| 久久久久久久久蜜桃| 在线播放中文一区| 欧美高清在线一区| 亚洲视频第一页| 巨乳诱惑日韩免费av| 亚洲精品资源美女情侣酒店| 国产精品qvod| 久久久久一区二区| 一本一本久久| 久久亚洲风情| 亚洲无毛电影| 一区久久精品| 国产精品捆绑调教| 久久亚洲春色中文字幕| 99热免费精品在线观看| 久久天堂精品| 国产精品99久久久久久久女警| 国产视频亚洲精品| 欧美日本国产| 久久精品国产视频| 日韩视频一区二区在线观看 | 99视频一区二区三区| 久久av二区| 一本大道久久a久久精二百| 国产欧美视频一区二区三区| 欧美gay视频| 午夜老司机精品| 亚洲人成亚洲人成在线观看| 久久精品成人一区二区三区 | 国产自产高清不卡| 欧美视频在线一区| 欧美成人自拍| 久久久99爱| 午夜亚洲伦理| 一本大道av伊人久久综合| 欧美成人高清视频| 久久精品人人做人人爽| 亚洲一区影院| 一本色道久久综合一区| 亚洲黄色影院| 激情综合色综合久久| 国产精品亚洲产品| 欧美香蕉大胸在线视频观看| 欧美黄色大片网站| 裸体丰满少妇做受久久99精品| 欧美在线一区二区| 午夜精品久久久久久久久久久 | 亚洲国产国产亚洲一二三| 久久久精品视频成人| 欧美一级二区| 亚洲午夜精品国产| 一区二区91| 一区二区三区精品| 欧美日韩精品一区二区三区四区 | 国产曰批免费观看久久久| 国产精品久久看| 国产精品视频精品视频| 国产精品盗摄久久久| 国产精品theporn88| 国产精品成人一区| 国产精品热久久久久夜色精品三区| 欧美小视频在线| 国产精品制服诱惑| 国产亚洲一区在线| 国产一区二区三区日韩| 国产综合久久久久久鬼色| 激情亚洲成人| 亚洲破处大片| 亚洲天堂网站在线观看视频| 亚洲资源在线观看| 欧美一区二区精品久久911| 久久精品国产一区二区电影| 美女任你摸久久| 亚洲成人在线视频播放 | 欧美顶级少妇做爰| 亚洲高清不卡一区| 一区二区久久久久久| 亚洲欧美中文字幕| 久久一区二区精品| 欧美日韩播放| 国产精自产拍久久久久久| 国产视频在线观看一区二区三区| 黄色成人91| 在线视频精品一区| 久久国产日韩| 亚洲激情校园春色| 亚洲在线视频网站| 麻豆精品视频在线观看视频| 欧美性猛交99久久久久99按摩 | 亚洲免费观看高清在线观看 | 久久av二区| 亚洲国产精品一区二区第四页av| 日韩一级在线| 欧美一区二区高清| 欧美日本在线看| 狠狠爱综合网| 亚洲午夜精品久久久久久app| 久久婷婷色综合| 一区二区三区黄色| 免费成人黄色片| 国产欧美欧美| 99re国产精品| 久久一二三四| 中日韩男男gay无套| 毛片基地黄久久久久久天堂| 国产精品一区二区在线| 亚洲精选大片| 免费在线看一区| 午夜精品久久| 国产精品成人v| 日韩视频二区| 欧美成人精品不卡视频在线观看| 一区二区av在线| 欧美激情综合五月色丁香| 狠狠色狠狠色综合日日小说| 午夜精品久久久久久久白皮肤| 亚洲茄子视频| 男同欧美伦乱| 亚洲国产视频一区| 久久久久久久一区二区|