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

colorful

zc qq:1337220912

 

Windows調(diào)試 - 如何使用dump文件

http://blog.csdn.net/jfkidear/article/details/22201829
 

Windows調(diào)試 - 如何使用dump文件

2013-02-04 16:05 445人閱讀 評論(0) 收藏 舉報(bào)
dmp dump debug visua

如何使用dump文件

我最近在開發(fā)一個(gè)windows下的程序(win7/win8),有一些case下會(huì)crash,如果在自己開發(fā)機(jī)器上調(diào)試比較簡單:運(yùn)行程序,然后vs attach到進(jìn)程上即可,但是在每臺(tái)QA的機(jī)器上安裝vs時(shí)不現(xiàn)實(shí)的,因此我們要用到dump文件。

微軟網(wǎng)站有一篇文章講述如何創(chuàng)建dump文件:

http://support.microsoft.com/kb/931673

第一種: 通過任務(wù)管理器:這種適用在程序掛了(crash)的時(shí)候進(jìn)程還未退出,比如我運(yùn)行程序,出現(xiàn)了下面的錯(cuò):


此時(shí)打開任務(wù)管理器,右擊相應(yīng)進(jìn)程,點(diǎn)擊"Create Dump File“:


一會(huì)創(chuàng)建完成:


然后把這個(gè)DMP文件拷到開發(fā)機(jī)器上,用VS打開: 會(huì)出現(xiàn)下面的界面,要想知道發(fā)生錯(cuò)誤時(shí)候的調(diào)用棧,需要設(shè)置symbol的路徑,點(diǎn)擊”Set Symbol Paths“:


注意這個(gè)pdb要對應(yīng)于crash的exe,否則調(diào)用棧沒法顯示:


設(shè)置完成后,點(diǎn)擊”Debug with Native Only“ 你就可以看到調(diào)用棧了。


第二種: 改注冊表

如果程序crash的時(shí)候沒有框蹦出來,可以通過改注冊表的設(shè)置讓操作系統(tǒng)在程序crash的時(shí)候自動(dòng)生成dump,并放到特定的目錄下

 

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps  
  2. Value Name = DumpType  
  3. Data type: REG_DWORD  
  4. Value Data = 1  

其中Value Data=1代表的含義是:

 

 

  1. 0 = Create a custom dump  
  2. 1 = Mini dump  
  3. 2 = Full dump  

設(shè)置完成后,crash發(fā)生時(shí),操作系統(tǒng)生成dump,路徑在%LOCALAPPDATA%\CrashDumps下,詳細(xì)可以參考:

 

http://msdn.microsoft.com/en-us/library/bb787181%28v=VS.85%29.aspx

(完)

posted @ 2015-10-21 15:22 多彩人生 閱讀(660) | 評論 (0)編輯 收藏

STL的remove函數(shù)和list的remove成員函數(shù)

http://www.cnblogs.com/kinuxroot/archive/2013/01/25/stl_remove_problem.html

今天看書剛剛看的,就記錄下來吧。這可能是老生常談了,權(quán)且作為一個(gè)警醒的例子吧。

大家都知道STL有兩個(gè)非常重要的組成部分,容器和算法。

算法就是一個(gè)個(gè)的函數(shù),通過迭代器和容器關(guān)聯(lián)在一起,完成一些工作。

算法和容器的分離為程序設(shè)計(jì)提供了很大的靈活性,但是也帶來了一些負(fù)面效果,下面我講的這個(gè)問題就是一個(gè)例子。

STL的算法里有一個(gè)remove函數(shù),而list自身也有一個(gè)remove函數(shù),功能都是一樣的,移除某一個(gè)元素,那我們應(yīng)該使用哪一個(gè)呢?

看一下下面這段程序

復(fù)制代碼
 1     list<int> numbers;  2   3     for ( int number = 0; number <= 6; number ++ ) {  4         numbers.push_front(number);  5         numbers.push_back(number);  6     }  7   8     copy(numbers.begin(), numbers.end(),  9             ostream_iterator<int>(cout, " ")); 10     cout << endl; 11  12     // remove algorithm will remove element but not erase the element from container 13     // it will return the logical desination of container 14     list<int>::iterator endOfNumbers = remove(numbers.begin(), numbers.end(), 3); 15  16     copy(numbers.begin(), numbers.end(), 17             ostream_iterator<int>(cout, " ")); 18     cout << endl;
復(fù)制代碼

輸出是什么呢?

第一行肯定是6 5 4 3 2 1 0 0 1 2 3 4 5 6,那么第二行會(huì)輸出什么?

如果是沒有仔細(xì)看過STL的人肯定會(huì)認(rèn)為remove(number.begin(), numbers.end(), 3)會(huì)移除所有值為3的元素。所以輸出是:6 5 4 2 1 0 0 1 2 4 5 6。

但是,我們看一下它真正的輸出:

6 5 4 2 1 0 0 1 2 4 5 6 5 6

你可能會(huì)非常驚訝,為什么最后會(huì)多出5和6兩個(gè)數(shù)呢?

我們來講一下remove算法的原理。

remove算法工作時(shí)并不是直接把元素刪除,而是用后面的元素替代前面的元素,也即是說如果我對1234這個(gè)序列remove 2,返回的序列是 1344(3被復(fù)制到2的位置,4被復(fù)制到3的位置)。

這樣上面的例子就好解釋了,那兩個(gè)3的元素并沒有被移除,而是用后面的元素覆蓋了前面的元素。多出的那兩個(gè)數(shù)沒有被移除掉而已。

那么我們應(yīng)該如何真正完成移除呢?remove函數(shù)會(huì)返回一個(gè)迭代器,那個(gè)迭代器是這個(gè)序列的邏輯終點(diǎn),也即是我代碼里的endOfNumbers,它指向倒數(shù)第二個(gè)5上。

于是我們要利用list的erase函數(shù)完成元素移除

numbers.erase(endOfNumbers, numbers.end());

這樣我們就完成了我們的工作,稍稍有點(diǎn)曲折……

其實(shí)我們可以把這兩步放在一起,比如如果我想接著移除所有值為2的元素

numbers.erase(remove(numbers.begin(), numbers.end(), 2), numbers.end());

這樣我們就可以一步到位了。

但是這樣好么?

不好。

大家會(huì)發(fā)現(xiàn),remove函數(shù)的原理是復(fù)制而不是指針的移動(dòng)(因?yàn)楹瘮?shù)操縱的是迭代器,而C++的迭代器沒有定義刪除操作),這樣會(huì)帶來一個(gè)問題:我們使用list是因?yàn)樗男薷牡男史浅8撸淖円幌轮羔樉涂梢粤恕6@里我們復(fù)制了元素,如果在vector中,可能還是高效的,因?yàn)関ector無論如何都要復(fù)制,而對于list就不是如此了,會(huì)極度降低我們的效率。

那我們怎么辦呢?

答案是使用list自己的remove函數(shù)

numbers.remove(1);

我們可以這樣刪除所有值為1的元素。

也即是說,如果要?jiǎng)h除list中的元素,我們應(yīng)該使用list的remove成員函數(shù),而不是remove算法

小結(jié)

我們都知道,STL是一個(gè)效率、復(fù)用性、靈活性折衷的產(chǎn)物,其中效率至關(guān)重要,所以STL已經(jīng)禁止了一些效率低的操作(比如list的隨機(jī)訪問),而鼓勵(lì)你去使用其它的容器。

但是,在算法中,為了靈活性,STL還是會(huì)犧牲一些東西,比如我們這個(gè)例子。

個(gè)人覺得,STL作為C++標(biāo)準(zhǔn)庫的一個(gè)組成部分,特點(diǎn)和C++本身一模一樣,強(qiáng)大而復(fù)雜,有些地方難以理解,很多細(xì)節(jié)需要學(xué)習(xí)注意,我們要學(xué)會(huì)避免陷入某些陷阱之中,比如這個(gè)例子就是一個(gè)效率陷阱。

其它更多的陷阱是錯(cuò)誤處理方面的,STL本身并沒有規(guī)定過多的錯(cuò)誤處理,大部分的錯(cuò)誤處理都交給了我們,理由很簡單:性能至上,如果一個(gè)東西自身沒有錯(cuò)誤檢查,我們可以包裝一個(gè)帶錯(cuò)誤檢查的類;但是如果這個(gè)東西自身就帶了錯(cuò)誤檢查,那么我們就沒有任何方法提升它的效率了。這也是很多C和C++庫的設(shè)計(jì)原則。

所以,很多時(shí)候,需要我們深入細(xì)節(jié),然后再?zèng)Q定到底怎么做。因?yàn)镃++就是如此:有很多路可以走,需要我們自己選擇最好的一條路。

分類: C++

posted @ 2015-10-14 15:50 多彩人生 閱讀(917) | 評論 (1)編輯 收藏

C++ 11 Lambda表達(dá)式

http://www.cnblogs.com/hujian/archive/2012/02/14/2350306.html
C++ 11中的Lambda表達(dá)式用于定義并創(chuàng)建匿名的函數(shù)對象,以簡化編程工作。Lambda的語法形式如下:
              [函數(shù)對象參數(shù)] (操作符重載函數(shù)參數(shù)) mutable或exception聲明 ->返回值類型 {函數(shù)體}
      可以看到,Lambda主要分為五個(gè)部分:[函數(shù)對象參數(shù)]、(操作符重載函數(shù)參數(shù))、mutable或exception聲明、->返回值類型、{函數(shù)體}。下面分別進(jìn)行介紹。
      一、[函數(shù)對象參數(shù)],標(biāo)識(shí)一個(gè)Lambda的開始,這部分必須存在,不能省略。函數(shù)對象參數(shù)是傳遞給編譯器自動(dòng)生成的函數(shù)對象類的構(gòu)造函數(shù)的。函數(shù)對象 參數(shù)只能使用那些到定義Lambda為止時(shí)Lambda所在作用范圍內(nèi)可見的局部變量(包括Lambda所在類的this)。函數(shù)對象參數(shù)有以下形式:
           1、空。沒有使用任何函數(shù)對象參數(shù)。
           2、=。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見的局部變量(包括Lambda所在類的this),并且是值傳遞方式(相當(dāng)于編譯器自動(dòng)為我們按值傳遞了所有局部變量)。
           3、&。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見的局部變量(包括Lambda所在類的this),并且是引用傳遞方式(相當(dāng)于編譯器自動(dòng)為我們按引用傳遞了所有局部變量)。
           4、this。函數(shù)體內(nèi)可以使用Lambda所在類中的成員變量。
           5、a。將a按值進(jìn)行傳遞。按值進(jìn)行傳遞時(shí),函數(shù)體內(nèi)不能修改傳遞進(jìn)來的a的拷貝,因?yàn)槟J(rèn)情況下函數(shù)是const的。要修改傳遞進(jìn)來的a的拷貝,可以添加mutable修飾符。
           6、&a。將a按引用進(jìn)行傳遞。
           7、a, &b。將a按值進(jìn)行傳遞,b按引用進(jìn)行傳遞。
           8、=,&a, &b。除a和b按引用進(jìn)行傳遞外,其他參數(shù)都按值進(jìn)行傳遞。
           9、&, a, b。除a和b按值進(jìn)行傳遞外,其他參數(shù)都按引用進(jìn)行傳遞。
      二、(操作符重載函數(shù)參數(shù)),標(biāo)識(shí)重載的()操作符的參數(shù),沒有參數(shù)時(shí),這部分可以省略。參數(shù)可以通過按值(如:(a,b))和按引用(如:(&a,&b))兩種方式進(jìn)行傳遞。
      三、mutable或exception聲明,這部分可以省略。按值傳遞函數(shù)對象參數(shù)時(shí),加上mutable修飾符后,可以修改按值傳遞進(jìn)來的拷貝(注意 是能修改拷貝,而不是值本身)。exception聲明用于指定函數(shù)拋出的異常,如拋出整數(shù)類型的異常,可以使用throw(int)。
      四、->返回值類型,標(biāo)識(shí)函數(shù)返回值的類型,當(dāng)返回值為void,或者函數(shù)體中只有一處return的地方(此時(shí)編譯器可以自動(dòng)推斷出返回值類型)時(shí),這部分可以省略。
      五、{函數(shù)體},標(biāo)識(shí)函數(shù)的實(shí)現(xiàn),這部分不能省略,但函數(shù)體可以為空。
      下面給出了一段示例代碼,用于演示上述提到的各種情況,代碼中有簡單的注釋可作為參考。
復(fù)制代碼
class CTest
{
public:
 CTest() : m_nData(20) { NULL; }
 void TestLambda()
 {
  vector<int> vctTemp;
  vctTemp.push_back(1);
  vctTemp.push_back(2);

  // 無函數(shù)對象參數(shù),輸出:1 2
  {
   for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });
  }

  // 以值方式傳遞作用域內(nèi)所有可見的局部變量(包括this),輸出:11 12
  {
   int a = 10;
   for_each(vctTemp.begin(), vctTemp.end(), [=](int v){ cout << v+a << endl; });
  }

  // 以引用方式傳遞作用域內(nèi)所有可見的局部變量(包括this),輸出:11 13 12
  {
   int a = 10;
   for_each(vctTemp.begin(), vctTemp.end(), [&](int v)mutable{ cout << v+a << endl; a++; });
   cout << a << endl;
  }

  // 以值方式傳遞局部變量a,輸出:11 13 10
  {
   int a = 10;
   for_each(vctTemp.begin(), vctTemp.end(), [a](int v)mutable{ cout << v+a << endl; a++; });
   cout << a << endl;
  }

  // 以引用方式傳遞局部變量a,輸出:11 13 12
  {
   int a = 10;
   for_each(vctTemp.begin(), vctTemp.end(), [&a](int v){ cout << v+a << endl; a++; });
   cout << a << endl;
  }

  // 傳遞this,輸出:21 22
  {
   for_each(vctTemp.begin(), vctTemp.end(), [this](int v){ cout << v+m_nData << endl; });
  }

  // 除b按引用傳遞外,其他均按值傳遞,輸出:11 12 17
  {
   int a = 10;
   int b = 15;
   for_each(vctTemp.begin(), vctTemp.end(), [=, &b](int v){ cout << v+a << endl; b++; });
   cout << b << endl;
  }


  // 操作符重載函數(shù)參數(shù)按引用傳遞,輸出:2 3
  {
   for_each(vctTemp.begin(), vctTemp.end(), [](int &v){ v++; });
   for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });
  }

  // 空的Lambda表達(dá)式
  {
   [](){}();
   []{}();
  }
 }

private:
 int m_nData;
};
復(fù)制代碼

posted @ 2015-04-21 10:39 多彩人生 閱讀(516) | 評論 (0)編輯 收藏

qcjl lua project log

2015/3/1
protoc-gen-lua 生成的lua又發(fā)現(xiàn)新的問題, main function has more than 200 local variables問題,網(wǎng)上搜索了一下,有相應(yīng)的解決方法,據(jù)說還會(huì)有一個(gè)新的問題出來:不能用 repeated submessage,  建議用云風(fēng)的pbc. 所以方案改為用云風(fēng)的pbc

posted @ 2015-03-01 11:55 多彩人生 閱讀(1593) | 評論 (0)編輯 收藏

cocos2dx lua protobuf

http://blog.csdn.net/weyson/article/details/17024325
http://m.shnenglu.com/colorful/archive/2015/01/17/209557.html
http://blog.csdn.net/w00w12l/article/details/39316321

protoc-gen-lua下載地址: https://github.com/sean-lin/protoc-gen-lua

1/ 先到protobuf的python目錄下執(zhí)行
    python setup.py build
    python setup.py install

2/ 在protoc-gen-lua的plugin目錄中新建protoc-gen-lua.bat, 內(nèi)容如下:
@python 目錄\protoc-gen-lua\plugin\protoc-gen-lua

3/ 用protoc把proto文件生成lua文件
  protoc --lua_out=./ --plugin=protoc-gen-lua="目錄\protoc-gen-lua.bat"  test.proto

4/ 將protoc-gen-lua/protobuf下的pb.c 放到工程的Classes下, 并加入到c++工程中

5/ 將protoc-gen-lua/protobuf上的所有l(wèi)ua文件放到工程的src目錄(lua目錄)下

6/ AppDelegate.cpp 添加代碼
extern "C"{
    int luaopen_pb(lua_State* L);
}
在applicationDidFinishLaunching()中調(diào)用 luaopen_pb(state);

---------------------------------------------------------------------------
    require "src/xy/person_pb"  
    local msg = person_pb.Person()  
    msg.id = 100   
    msg.name = "foo"   
    msg.email = "bar"   

    local pb_data = msg:SerializeToString()  -- Parse Example  
    print("create:", msg.id, msg.name, msg.email, pb_data)  


    local msg = person_pb.Person()   
    msg:ParseFromString(pb_data)   
    print("parser:", msg.id, msg.name, msg.email, pb_data)

---------------------------------------------------------------------------
移植到android 記得將pb.c添加到proj.android\jni\Android.mk中

 

posted @ 2015-02-12 11:42 多彩人生 閱讀(1576) | 評論 (0)編輯 收藏

error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“wctomb”

1>  pb.c
1>e:\test003\test101\src\pb.c : warning C4819: 該文件包含不能在當(dāng)前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數(shù)據(jù)丟失
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(18): error C2054: 在“using”之后應(yīng)輸入“(”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(18): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“using”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(19): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“using”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(19): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“abs”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(19): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(19): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“atexit”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(20): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“atof”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(20): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(20): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“atoi”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(20): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“atol”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(21): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“bsearch”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(21): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(21): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“calloc”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(21): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“div”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(22): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“exit”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(22): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(22): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“free”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(23): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“labs”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(23): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(23): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“ldiv”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(23): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“malloc”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(24): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“mblen”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(24): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(24): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“mbstowcs”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(24): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“mbtowc”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(25): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“qsort”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(25): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(25): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“rand”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(25): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“realloc”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(26): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“srand”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(26): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(26): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“strtod”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(26): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“strtol”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(27): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“strtoul”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(27): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(28): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“wcstombs”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(28): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(28): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“wctomb”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(30): error C2054: 在“using”之后應(yīng)輸入“(”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(33): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“using”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(34): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“system”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(34): error C2059: 語法錯(cuò)誤:“;”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(37): error C2061: 語法錯(cuò)誤: 標(biāo)識(shí)符“atoll”
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\cstdlib(37): error C2059: 語法錯(cuò)誤:“;”
解決方法:
右擊.c文件,c/c++/高級,強(qiáng)制包含文件,如果有algorithm或者其他的,去掉,重新編譯

posted @ 2015-02-06 10:37 多彩人生 閱讀(3433) | 評論 (0)編輯 收藏

fatal error C1853: "Debug\sift.pch"預(yù)編譯頭文件來自編譯器的早期版本

該錯(cuò)誤是因?yàn)楫?dāng)項(xiàng)目中混合了 .cpp 和 .c 文件時(shí),編譯器會(huì)對它們采取不同的編譯方式(主要是因?yàn)閷瘮?shù)聲明的處理方式不同),
因而不能共用一個(gè)預(yù)編譯頭文件。在 VC++ 中,默認(rèn)的預(yù)編譯頭文件是針對 C++ 的 (stdafx.h 和 stdafx.cpp),當(dāng)然也可以創(chuàng)建針對 C 的預(yù)編譯頭。

方法:將少數(shù)的不同類文件設(shè)為不使用預(yù)編譯頭是比較平衡的做法,方法是:對于 VC++6.0,在 FileView 里對要取消預(yù)編譯頭的 .c (或 .cpp) 文件點(diǎn)右鍵,
選擇 settings,在彈出的對話框右邊選擇 category 為 precompiled headers,再設(shè)置選項(xiàng)為 not using ...;
(對于 VS2005,則在 solution explorer 中對相應(yīng)文件點(diǎn)右鍵選擇 properties,在 precompiled headers 項(xiàng)下設(shè)置 not using... 即可。如果需要設(shè)置多個(gè)文件,
則可以按住 Ctrl 鍵再同時(shí)選中這些文件并設(shè)置)
PS:解釋如下點(diǎn)擊項(xiàng)目 點(diǎn)擊屬性 然后選擇C/C++ 預(yù)編譯頭 創(chuàng)建使用頭文件 不使用預(yù)編譯頭文件
(解決方案資源管理器-右擊需要排除的c或cpp文件]-彈出屬性菜單-展開C/C++-預(yù)編譯頭-創(chuàng)建/使用預(yù)編譯頭-選擇不適用預(yù)編譯頭)

posted @ 2015-02-05 18:32 多彩人生 閱讀(12638) | 評論 (0)編輯 收藏

error C2275: “XXX”: 將此類型用作表達(dá)式非法

在移植c++代碼到c的時(shí)候,經(jīng)常會(huì)出現(xiàn)一個(gè)奇怪的錯(cuò)誤,
error C2275: “XXX”: 將此類型用作表達(dá)式非法

表達(dá)式非法,這個(gè)錯(cuò)誤是由于c的編譯器要求將變量的申明放在一個(gè)函數(shù)塊的頭部,而c++沒有這樣的要求造成的。


解決的辦法就是把變量的申明全部放在變量的生存塊的開始。

posted @ 2015-02-05 18:30 多彩人生 閱讀(6893) | 評論 (0)編輯 收藏

Quick-Cocos2d-x 集成 Google protobuf 方法

http://cn.cocos2d-x.org/tutorial/show?id=506

本文將向您介紹Quick-Cocos2d-x集成google protobuf的方法。  
 
第一步   需要最新的protobuf 類庫和解析程序。 
下載地址:https://github.com/sean-lin/protoc-gen-lua
 
git clone https://github.com/sean-lin/protoc-gen-lua.git 到任意的一個(gè)地方
 

然后,可以得到重要的兩個(gè)目錄

1
2
protoc-gen-lua/plugin/ 
protoc-gen-lua/protobuf/
 
第二步, 需要使用protoc —lua_out=. 這種方法, 將我們自己的*.proto 的文件解析成lua文件

plugin目錄是提供將buffer 文件解析成lua 版本的類庫, 需要python 支持。  如果已經(jīng)編譯了google 官方的protoc 那個(gè)程序, 只需要在系統(tǒng)PATH環(huán)境變量總追加plugin目錄就好:

1
export PATH={protoc-gen-lua DIR }/plugin:$PATH
 
關(guān)于protoc的編譯另請google .
 
如果解析不出lua文件來, 可以手動(dòng)志信一下plugin/protoc-gen-lua的程序, 他應(yīng)該是+x 的權(quán)限(chmod +x plugin/protoc-gen-lua)
 
細(xì)節(jié)的安裝步驟可以參考 https://code.google.com/p/protoc-gen-lua/
 
第三步 , 將protobuf 集成到quick 中
protoc-gen-lua/protobuf/ 目錄就是要編譯到quick-cocos2d-x目錄里面的部分。 
 
現(xiàn)在, 我們只需要 protoc-gen-lua/protobuf/pb.c 這個(gè)文件 
 

先確定自己的quick-cocos2d-x lua擴(kuò)展目錄:

1
/quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/
 
所有l(wèi)ua 的c/c++現(xiàn)成擴(kuò)展,都可以直接放到這里。 
  
將pb.c這個(gè)文件復(fù)制到 lua_extension目錄下, 最好獨(dú)立一個(gè)目錄, 免得擴(kuò)展多了亂。 
  

這是我的目錄結(jié)構(gòu):

1
./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c
  
然后開始修改擴(kuò)展程序配置文件, lua_extensions.c
 

路徑為:

1
./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c
 

目前是一個(gè)不足60行的小文件, 我打算全部貼進(jìn)來:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "lua_extensions.h" 
   
#if __cplusplus 
extern "C"
#endif 
    
// cjson 
#include "cjson/lua_cjson.h" 
    
    
// zlib 
#include "zlib/lua_zlib.h" 
    
    
// lpack 
#include "lpack/lpack.h" 
    
    
// socket 
#include "socket/luasocket.h" 
#include "socket/mime.h" 
#include "socket/socket_scripts.h" 
    
    
// filesystem 
#include "filesystem/lfs.h" 
    
    
// lsqlite3 
#include "lsqlite3/lsqlite3.h" 
    
    
#include "protobuf/pb.c"   //引用protobuf 庫文件 
    
    
static luaL_Reg luax_exts[] = { 
     {"cjson", luaopen_cjson_safe}, 
     {"zlib", luaopen_zlib}, 
     {"pack", luaopen_pack}, 
     {"socket.core", luaopen_socket_core}, 
     {"mime.core", luaopen_mime_core}, 
     {"lfs", luaopen_lfs}, 
     {"lsqlite3", luaopen_lsqlite3}, 
     {NULL, NULL} 
}; 
    
    
void luaopen_lua_extensions(lua_State *L) 
     // load extensions 
     luaL_Reg* lib = luax_exts; 
     lua_getglobal(L, "package"); 
     lua_getfield(L, -1, "preload"); 
     for (; lib->func; lib++) 
     
         lua_pushcfunction(L, lib->func); 
         lua_setfield(L, -2, lib->name); 
     
     lua_pop(L, 2); 
    
    
     // load extensions script 
     luaopen_socket_scripts(L); 
     luaopen_pb(L);   //這是加入的protobuf 擴(kuò)展注冊名 
    
    
#if __cplusplus 
} // extern "C" 
#endif
至此 , protobuf 擴(kuò)展部分就算擴(kuò)展完成了。 
 
確認(rèn)是否成功支持 , 可以在quick 項(xiàng)目最先被調(diào)用的lua文件中追加 require "pb" 做測試。 
 
*但這時(shí)候通過protoc 轉(zhuǎn)碼后得到的lua文件還不能被解析。 
 
第四步 從項(xiàng)目中包含protobuf的 lua庫
protoc-gen-lua/protobuf/這個(gè)目錄下面, 還有大量的.lua文件, 是用來支持proto轉(zhuǎn)碼后的文件解析調(diào)用的。 不能少了這些文件。 
 
復(fù)制protoc-gen-lua/protobuf文件夾 到項(xiàng)目中 scripts目錄下。  
  

目錄結(jié)構(gòu)應(yīng)該是這樣的:

1
[PROJECT]/scripts/protobuf/*.lua
 
然后, 需要告訴框架,從哪里可以引用到它。 
 

修改main.lua 在require("appxxxxxx") 上面 , 加入下面的代碼:

1
package.path = package.path .. ";./protobuf/?.lua;./scripts/protobuf/?.lua;"
 
這個(gè)方法, 能保證程序在被編譯到手機(jī)之后仍然可以繼續(xù)訪問這個(gè)庫。 
  
***千萬別把轉(zhuǎn)碼的proto文件放到[PROJECT]/scripts/protobuf 目錄里面.不信可以試試。
 
現(xiàn)在, 項(xiàng)目支持protobuf 文件的解析了。
 
第五步  重新編譯player-x
如果不習(xí)慣用player-x調(diào)試, 這個(gè)步驟不是必須的。 
 

進(jìn)入player-x qt源碼目錄 :

1
cd quick-cocos2d-x/player/proj.qt
 

使用qmake 文件執(zhí)行quick-x.pro 文件 

1
qmake ./quick-x.pro
 
繼續(xù):
make 
 
等待結(jié)束, 將得到的quick-x-player文件, 
 
放到:quick-cocos2d-x/player/bin/mac/ 目錄下, 這樣sublime text 裝QuickXDev 擴(kuò)展的直接可以用。 
  
**如果是mac os 10.9 系統(tǒng), 可能編譯不過去player-x程序。 我遇到了這個(gè)問題。 
 
會(huì)提示錯(cuò)誤  pb.c:28:10: fatal error: 'endian.h' file not found 
 

如果錯(cuò)誤信息相同, 修改文件:

1
./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c
 

查找行:

1
#include <endian.h>
  

臨時(shí)變更為:

1
#include <machine/endian.h>
  
然后重新編譯 player-x 
 
make 就足夠了 
 
make
 
**player-x 編譯完畢后, 千萬要將endian.h 引用改回原來的 #include <endian.h> , 否則打包到手機(jī)的時(shí)候又回提示文件找不到了。 

posted @ 2015-01-17 16:08 多彩人生 閱讀(1963) | 評論 (0)編輯 收藏

Lua注冊回調(diào)到C++

http://cn.cocos2d-x.org/tutorial/show?id=1896

思路

像所有語言一樣,綁定回調(diào)主要是執(zhí)行的任務(wù)執(zhí)行到特定情形的時(shí)候,調(diào)用對用回調(diào)方法。 本文也一樣,Lua注冊回調(diào)到C++的核心思路是,當(dāng)C代碼執(zhí)行到特定特定情形的時(shí)候,調(diào)用Lua的方法。

我這里使用的是用lua_stack直接調(diào)用lua的方法,沒有使用Cocos2d-x封裝的那個(gè)dispatcher,因?yàn)槭煜つ莻€(gè)格式太墨跡了。


主要步驟如下

  • 緩存Lua函數(shù)在Lua環(huán)境中的引用

  • 在C代碼的地方用C的方式設(shè)置好回調(diào)

  • 在C代碼回調(diào)函數(shù)執(zhí)行的時(shí)候,調(diào)用lua函數(shù)


實(shí)現(xiàn)

  • C代碼綁定回調(diào),調(diào)用Lua函數(shù)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void ArmatureNode::registerMovementEventHandler(int handler)
{
    unregisterMovementEventHandler();  //移除之前注冊的監(jiān)聽
    _movementHandler = handler;         //緩存lua函數(shù)的引用 這個(gè)后邊說
     
    auto dispatcher = getCCEventDispatcher();
     
    auto f = [this](cocos2d::EventCustom *event) //注冊c代碼形式的回調(diào) 這里用function做
    {
        auto eventData = (dragonBones::EventData*)(event->getUserData());
        auto type = (int) eventData->getType();
        auto movementId = eventData->animationState->name;
        auto lastState = eventData->armature->getAnimation()->getLastAnimationState();
         
        auto stack = cocos2d::LuaEngine::getInstance()->getLuaStack();
        stack->pushObject(this"db.ArmatureNode");
        stack->pushInt(type);
        stack->pushString(movementId.c_str(), movementId.size());        
        //通過LuaStack調(diào)用lua里的函數(shù)    最后一個(gè)參數(shù)設(shè)置參數(shù)個(gè)數(shù)
        stack->executeFunctionByHandler(_movementHandler, 3);
    };
     
    dispatcher->addCustomEventListener(dragonBones::EventData::COMPLETE, f);
}
void ArmatureNode::unregisterMovementEventHandler(void)
{
    if (0 != _movementHandler)
    {
        cocos2d::LuaEngine::getInstance()->removeScriptHandler(_movementHandler); //移除lua函數(shù)的綁定
        _movementHandler = 0;
    }
}
  • 提供Lua函數(shù)綁定到C的方法   

上邊的這個(gè)函數(shù)直接用cocos里的genbinding.py 是無法正確生成Lua里可調(diào)用的接口的,需要手動(dòng)編寫綁定方法.

說這個(gè)得用到Cocos2d-x中提供的一個(gè)方法:toluafix_ref_function會(huì)把一個(gè)Lua棧中的方法轉(zhuǎn)成一個(gè)int,以便C++中調(diào)用。我會(huì)在最后面說這個(gè)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int tolua_db_DBCCArmature_registerMovementEventHandler(lua_State* tolua_S)
{
    if (NULL == tolua_S)
        return 0;
    int argc = 0;
     
    dragonBones::ArmatureNode* self = nullptr;
    self = static_cast<dragonBones::ArmatureNode*>(tolua_tousertype(tolua_S,1,0)); //第一個(gè)參數(shù) 就是lua里的self
     
    argc = lua_gettop(tolua_S) - 1;
     
    if (1 == argc)
    {
        //第二個(gè)參數(shù),就是Lua里的function 這里要通過toluafix_ref_function這個(gè)函數(shù)映射成一個(gè)Int值
        int handler = (toluafix_ref_function(tolua_S,2,0)); 
        self->registerMovementEventHandler(handler);
         
        return 0;
    }
    return 0;
}

 

  • 將綁定方法綁定到Lua環(huán)境里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int extends_ArmatureNode(lua_State* tolua_S)
{
    lua_pushstring(tolua_S, "db.ArmatureNode");//之前db.ArmatureNode是通過腳本綁定在lua里。這里只做擴(kuò)展
    lua_rawget(tolua_S, LUA_REGISTRYINDEX);
    if (lua_istable(tolua_S,-1))
    {
        lua_pushstring(tolua_S,"registerMovementEventHandler");
        lua_pushcfunction(tolua_S,tolua_db_DBCCArmature_registerMovementEventHandler);
        lua_rawset(tolua_S,-3);
    }
     
    lua_pop(tolua_S, 1);
    return 0;
}
  • Lua里設(shè)置回調(diào)到C++

1
2
3
4
5
6
7
8
 local arm = db.ArmatureNode:create("Dragon")
    local animation = arm:getAnimation()
    animation:gotoAndPlay("walk")
    arm:registerMovementEventHandler(
        function(...)
            print(...) 
        end
    )


-測試

打印回調(diào)輸出,測試通過 userdata 8 walk


其他

  • toluafix_ref_function 以及 toluafix_get_function_by_refid

這 兩個(gè)方法是相互對應(yīng)的 toluafix_ref_function這個(gè)方法在注冊表上將一個(gè)lua的function與一個(gè)function_id生成映射 toluafix_get_function_by_refid 方法可以通過前一個(gè)方法生成的function_id來講綁定的lua function放到棧頂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//
TOLUA_API int toluafix_ref_function(lua_State* L, int lo, int def)
{
    if (!lua_isfunction(L, lo)) return 0;
    s_function_ref_id++;                            //function_id 加1
    lua_pushstring(L, TOLUA_REFID_FUNCTION_MAPPING);//在注冊表上,存放luafunction 映射table 的key壓棧
    lua_rawget(L, LUA_REGISTRYINDEX);               //獲取方法映射表,放在棧頂
    lua_pushinteger(L, s_function_ref_id);          //function_id壓棧
    lua_pushvalue(L, lo);                           //lo有效處索引處是lua方法,lua方法拷貝,壓棧
 
 
    lua_rawset(L, -3);                        //生成映射 
    lua_pop(L, 1);                                              
    return s_function_ref_id;
}
TOLUA_API void toluafix_get_function_by_refid(lua_State* L, int refid)
{
    lua_pushstring(L, TOLUA_REFID_FUNCTION_MAPPING);            //存放luafunction 映射table 的key壓棧
    lua_rawget(L, LUA_REGISTRYINDEX);                           //獲取方法映射表,放在棧頂
    lua_pushinteger(L, refid);                                  //function_id壓棧
    lua_rawget(L, -2);                                          //獲取到的luafunction 放到棧頂
    lua_remove(L, -2);                                          //
}
  • executeFunctionByHandler

executeFunctionByHandler 這個(gè)方法只是通過toluafix_get_function_by_refid 獲取到function然后通過lua_pcall 方法調(diào)用,代碼就不寫了。

posted @ 2015-01-17 11:12 多彩人生 閱讀(2867) | 評論 (0)編輯 收藏

僅列出標(biāo)題
共25頁: 1 2 3 4 5 6 7 8 9 Last 

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线一区欧美| 亚洲国产精品一区二区第一页 | 亚洲午夜免费福利视频| 亚洲新中文字幕| 亚洲网站在线播放| 最新成人在线| 韩国一区电影| 亚洲国产综合在线| 国产精品视频一区二区三区| 免费看黄裸体一级大秀欧美| 久久综合网hezyo| 午夜欧美精品| 亚洲欧美国产高清| 亚洲免费观看在线视频| 久久久久国色av免费看影院| 国产精品99久久久久久久女警| 久久亚洲国产精品一区二区| 日韩一级二级三级| 欧美电影在线观看完整版| 欧美在线观看你懂的| 在线一区视频| 亚洲一区中文| 中文日韩在线视频| 性娇小13――14欧美| 欧美一级专区| 欧美在线亚洲一区| 久久精品国内一区二区三区| 亚洲美女色禁图| 午夜在线不卡| 欧美激情视频一区二区三区免费| 国产精品美女诱惑| 永久域名在线精品| av72成人在线| 久久精品亚洲热| 欧美成人一二三| 91久久久在线| 中文亚洲字幕| 美女精品在线观看| 欧美视频一区二区三区四区| 国产精品你懂的| 国内外成人免费激情在线视频| 欧美日韩中文精品| 亚洲国产精品成人综合| 一区二区不卡在线视频 午夜欧美不卡' | 欧美一区二区三区免费看| 欧美一区影院| 在线亚洲欧美专区二区| 久热re这里精品视频在线6| 欧美日本精品| 国产婷婷色一区二区三区| 亚洲高清激情| 久热精品视频在线免费观看| 一区二区三区日韩精品| 久久狠狠亚洲综合| 亚洲一区bb| 欧美 亚欧 日韩视频在线| 国产精品一区二区三区久久| 一本一本a久久| 亚洲欧美三级在线| 欧美精品一区在线播放| 国产热re99久久6国产精品| 亚洲欧洲一区二区三区在线观看| 亚洲欧美成人网| 亚洲少妇最新在线视频| 亚洲福利一区| 欧美激情中文字幕一区二区 | 亚洲精选在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 99国产精品久久久久久久成人热| 亚洲乱码国产乱码精品精天堂| 午夜精品理论片| 亚洲午夜日本在线观看| 国产精品夜色7777狼人| 久久国产精品毛片| 久久精品免费| 亚洲精品1区| 日韩视频亚洲视频| 国产精品久久久久久久久久免费| 亚洲欧美日韩精品综合在线观看| 亚洲综合大片69999| 国产欧美日韩一区二区三区在线观看| 久久精品麻豆| 欧美激情视频一区二区三区在线播放| 99在线观看免费视频精品观看| 一本久道久久综合中文字幕 | 亚洲国产精品第一区二区三区| 欧美韩日一区二区三区| 欧美喷水视频| 午夜精品久久久久久久99樱桃| 午夜亚洲伦理| 亚洲人成网站在线观看播放| 99精品热6080yy久久| 国产一区二区三区网站 | 欧美一站二站| 亚洲美女中文字幕| 亚洲欧美国产三级| 亚洲国产精品t66y| 亚洲午夜av电影| 在线观看久久av| 这里只有精品视频| 亚洲国产欧美一区二区三区同亚洲| a4yy欧美一区二区三区| 黄色日韩精品| 亚洲一区不卡| 一卡二卡3卡四卡高清精品视频 | 欧美日本在线视频| 久久国产精品一区二区三区四区| 美女性感视频久久久| 欧美伊人久久久久久午夜久久久久| 老司机精品视频一区二区三区| 亚洲欧美综合网| 欧美日韩国产123区| 久久一区二区三区四区| 国产精品入口福利| 亚洲久久在线| 亚洲精品少妇| 久久一区二区三区四区| 性欧美8khd高清极品| 欧美日韩午夜剧场| 欧美国产亚洲另类动漫| 国产一区二区三区黄| 亚洲素人在线| 一区二区三区高清在线| 久久综合久久综合九色| 久久精品视频一| 国产欧美日本| 欧美亚洲日本网站| 欧美在线高清视频| 国产一区在线看| 国产精品久久999| 亚洲欧洲日本在线| **网站欧美大片在线观看| 欧美一区二区精美| 欧美一区2区三区4区公司二百| 国产精品a久久久久久| 99在线热播精品免费99热| av成人天堂| 欧美日韩日本国产亚洲在线| 最新日韩欧美| 一区二区三区成人| 国产精品va在线播放| 亚洲视频网在线直播| 亚洲欧美中文日韩在线| 国产欧美精品日韩精品| 欧美亚洲综合在线| 久久亚洲一区二区| 亚洲国产欧美国产综合一区| 媚黑女一区二区| 亚洲毛片在线免费观看| 亚洲色图在线视频| 国产精品网站视频| 久久国产欧美精品| 欧美电影免费观看| 亚洲最新合集| 国产噜噜噜噜噜久久久久久久久| 欧美亚洲视频| 欧美黑人多人双交| 亚洲摸下面视频| 国产欧美日韩综合一区在线观看| 欧美一区二区视频观看视频| 女女同性女同一区二区三区91| 亚洲精品日韩在线| 国产精品久久久久久久久果冻传媒| 欧美一区二区三区日韩视频| 亚洲电影免费观看高清完整版在线观看 | 欧美在线视频二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美激情综合五月色丁香小说 | 欧美高清视频www夜色资源网| 亚洲精品中文字幕女同| 国产精品白丝jk黑袜喷水| 午夜日韩激情| 亚洲人成在线观看| 久久超碰97人人做人人爱| 亚洲国产视频a| 国产精品免费电影| 欧美成人免费播放| 亚洲欧美日韩在线一区| 亚洲激精日韩激精欧美精品| 午夜精品99久久免费| 亚洲日本电影| 一区二区三区四区五区视频| 国内精品亚洲| 国产精品成人免费| 亚洲美女区一区| 亚洲精品欧洲精品| 亚洲男女自偷自拍图片另类| 在线观看日韩国产| 久久久午夜电影| 欧美国产亚洲另类动漫| 国产欧美一级| 亚洲第一福利在线观看| 亚洲国产欧美在线| 欧美精品免费视频| 亚洲国产精品ⅴa在线观看 | 久久成人人人人精品欧| 亚洲电影免费观看高清完整版在线观看 | 亚洲免费小视频| 亚洲精品资源美女情侣酒店| 美女国产一区|