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

隨筆 - 505  文章 - 1034  trackbacks - 0
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 923082
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

CEGUI version 0.6

為了便于找到問題,需要打開應(yīng)用程序的控制臺(tái),并且要知道寫的lua腳本中哪行語法錯(cuò)了(畢竟不是天天寫lua,語法錯(cuò)了很正常)

1.Q:打開應(yīng)用程序的控制臺(tái)
   A:

         

如何在窗口程序中使用控制臺(tái)(/subsystem /entry)(轉(zhuǎn))
2007-12-18 13:07
1. 原理
首先我們來看一下linker的 /subsystem 選項(xiàng)
該選項(xiàng)的語法形式如下:
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
[,major[.minor]]
這個(gè)鏈接選項(xiàng)告訴操作系統(tǒng)如何運(yùn)行可執(zhí)行文件
CONSOLE:
win32 字符模式應(yīng)用程序,此種類型的應(yīng)用程序在運(yùn)行的時(shí)候會(huì)產(chǎn)生一個(gè)類似DOS
窗口的控制臺(tái)窗口,如果在應(yīng)用程序的主函數(shù)為main()或者wmain(),在默認(rèn)情況下
該應(yīng)用程序就是一個(gè)控制臺(tái)應(yīng)用程序
Extensible Firmware Interface
和CPU具體架構(gòu)相關(guān)的一個(gè)參數(shù)選項(xiàng),并不常用,在這里暫不詳細(xì)介紹.
如果對此有興趣的可以訪問intel主頁來查看相關(guān)內(nèi)容
NATIVE;
設(shè)備驅(qū)動(dòng)器選項(xiàng),如果/DRIVER:WDM選項(xiàng)被設(shè)定的話,該鏈接選項(xiàng)(NATIVE)就為默認(rèn)選項(xiàng)
POSIX:
在windows NT 種運(yùn)行在POSIX子系統(tǒng)上的應(yīng)用程序
WINDOWS:
該類型的應(yīng)用程序不產(chǎn)生console窗口,該類型的應(yīng)用程序的窗口由用戶自己創(chuàng)建,簡而言之
就是一個(gè)標(biāo)準(zhǔn)的Win32 application,其入口地址為WinMain()函數(shù)或者wWinMain()函數(shù)的地址
如果你在應(yīng)用程序種定義的主函數(shù)為WinMain或者wWinMain,在默認(rèn)情況下該應(yīng)用程序就是一個(gè)
Win32 Application !
WINDOWSCE:
運(yùn)行在windows CE上的應(yīng)用程序
major and minor (optional):
主版本號(hào)和次版本號(hào),該選項(xiàng)為可選,該選項(xiàng)為0~65535之間的十進(jìn)制整數(shù)
從上面可以看出如果我們建立一個(gè)win32 console application的話,linker的/subsystem選項(xiàng)應(yīng)該為
CONSOLE,可以在VC開發(fā)環(huán)境的project->setting->link->project option中看到!
接下來我們再看看應(yīng)用程序是如何運(yùn)行的!
我們知道用VC編寫的程序,運(yùn)行的時(shí)候是需要 C\C++運(yùn)行庫支持的.當(dāng)我們運(yùn)行一個(gè)C/C++程序的時(shí)候
鏈接器會(huì)首先尋找應(yīng)用程序的啟動(dòng)函數(shù),例如:
如果你建立了一個(gè)console程序的話,編譯器得鏈接開關(guān)會(huì)是以下這種形式
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
如果你建立了一個(gè)win32 application,編譯器得鏈接開關(guān)則會(huì)是一下形式
/subsystem:"windows" /entry:"WinMain" (ANSI)
/sbusystem:"windows" /entry:"wWinMain" (UINCODE)
上面的兩種形式可以再project->setting->link->project option中看到
上面的subsystem和entry并不需要都設(shè)置,如果你只設(shè)置了/subsystem:"console"
的話,那么默認(rèn)的entry開關(guān)在默認(rèn)情況下應(yīng)為/entry:"mainCRTStartup"
反之,如果你在應(yīng)用程序中定義了main函數(shù)的話,默認(rèn)情況下,你的/subsystem開關(guān)
應(yīng)該為/system:"console"

在默認(rèn)情況下/subsystem 和/entry開關(guān)是匹配的,也就是
console對應(yīng)mainCRTStartup或者wmainCRTStartup
windows對應(yīng)WinMain或者wWinMain
但是我們也可以通過手動(dòng)改動(dòng)的方式使他們不匹配

例如我們可以這樣改動(dòng)
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設(shè)置入口地址

int main(int argc, char* argv[])
{
MessageBox(NULL, "hello", "Notice", MB_OK);
return 0;
}
在默認(rèn)情況下鏈接器看到/subsystem下是windows選項(xiàng)的時(shí)候,它會(huì)自動(dòng)尋找WinMain或者wWinMain
但我們強(qiáng)制指定入口地址,這樣運(yùn)行程序的時(shí)候默認(rèn)的console窗口就會(huì)隱藏!

上面是在代碼中使用#pragma指令來設(shè)置,還有一種就是直接在開發(fā)環(huán)境的
project->setting->link->project option中手工改動(dòng)!
在明白了通過/subsystem選項(xiàng)可以控制鏈接程序的類型后,我們可以根據(jù)需要來生成具有控制臺(tái)的Windows窗口程序。

2. 生成具有console窗口的Win32窗口程序(不使用MFC)

使用Visual Studio.Net 2003建立一個(gè)Win 32窗口項(xiàng)目(不使用MFC):Win32WithConsole,在項(xiàng)目的屬性對話框中,依次選擇‘配置屬性’->‘鏈接器’->‘system’,在‘子系統(tǒng)’一項(xiàng)中,將‘Windows (/SUBSYSTEM:WINDOWS)’改為‘控制臺(tái)(/SUBSYSTEM:CONSOLE)’ 。現(xiàn)在,該項(xiàng)目所生成的可執(zhí)行文件的入口函數(shù)將是mainCRTStartup或是wmainCRTStartup,我們只需要定義一個(gè)main函數(shù),并進(jìn)行適當(dāng)?shù)娜肟趨?shù)轉(zhuǎn)換,同時(shí)在該main函數(shù)中調(diào)用原來的入口函數(shù)_tWinMain即可。下面是Win32WithConsole.cpp文件中我們需要添加的main函數(shù):
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
HINSTANCE hPreInstance = NULL;
TCHAR szCmdLine[1024];
szCmdLine[0] = 0;
LPTSTR lpCmdLine = szCmdLine;
for ( int i = 1; i < argc; i++ )
{
   if ( i > 1 )
   {
    _tcscpy(lpCmdLine, _T(" "));
    lpCmdLine = lpCmdLine + _tcslen(_T(" "));
   }
   _tcscpy(lpCmdLine, argv[i]);
   lpCmdLine = lpCmdLine + _tcslen(argv[i]);
}
lpCmdLine = szCmdLine;
int nCmdShow = SW_SHOWNORMAL;
int ret = _tWinMain(hInstance, hPreInstance, lpCmdLine, nCmdShow);
return 0;
}
可以參考附加的文件Win32WithConsole.rar。

3.生成具有console窗口的MFC窗口應(yīng)用程序

使用向?qū)梢粋€(gè)多文檔的MFC應(yīng)用程序,MFCWithConsole。同樣,將該項(xiàng)目配置為‘控制臺(tái)(/SUBSYSTEM:CONSOLE)’,下面我們需要找到MFC應(yīng)用程序的入口函數(shù)。通過調(diào)試該程序,我們可以發(fā)現(xiàn),MFC框架通過AfxWinMain來調(diào)用項(xiàng)目中全局CWinApp變量theApp的InitInstance成員函數(shù),從而啟動(dòng)整個(gè)應(yīng)用程序。因此,我們可以使用兩種方式來顯式調(diào)用AfxWinMain函數(shù),從而創(chuàng)建一個(gè)具有console窗口的MFC窗口應(yīng)用程序。
第一種方法是在MFCWithConsole項(xiàng)目中加入AfxWinMain的定義,該函數(shù)的定義可以從winmain.cpp文件中,下面是其具體內(nèi)容:
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);
int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();
// AFX internal initialization
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
   goto InitFailure;
// App global initializations (rare)
if (pApp != NULL && !pApp->InitApplication())
   goto InitFailure;
// Perform specific initializations
if (!pThread->InitInstance())
{
   if (pThread->m_pMainWnd != NULL)
   {
    TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
    pThread->m_pMainWnd->DestroyWindow();
   }
   nReturnCode = pThread->ExitInstance();
   goto InitFailure;
}
nReturnCode = pThread->Run();
InitFailure:
#ifdef _DEBUG
// Check for missing AfxLockTempMap calls
if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
{
   TRACE(traceAppMsg, 0, "Warning: Temp map lock count non-zero (%ld).\n",
    AfxGetModuleThreadState()->m_nTempMapLock);
}
AfxLockTempMaps();
AfxUnlockTempMaps(-1);
#endif
AfxWinTerm();
return nReturnCode;
}

第二種方法是顯式加載mfc71d.dll或是mfc71.dll,并調(diào)用其中的AfxWinMain函數(shù)。不過,這兩個(gè)動(dòng)態(tài)鏈接庫都是使用NONAME的方式來導(dǎo)出函數(shù)的,因此只能通過函數(shù)序號(hào)的方式來調(diào)用AfxWinMain函數(shù)。通過在IDA Pro中對這兩個(gè)動(dòng)態(tài)鏈接庫進(jìn)行反編譯,我們可以發(fā)現(xiàn)AfxWinMain在mfc71d.dll中的序號(hào)為1589,而在mfc71.dll中的序號(hào)為1207,下面即是使用動(dòng)態(tài)鏈接庫的方式調(diào)用AfxWinMain的方法。
// wrong
// typedef int __stdcall (*MYPROC)(HINSTANCE, HINSTANCE,LPTSTR, int);
typedef int (__stdcall *AFXWINMAIN_FUNC)(HINSTANCE, HINSTANCE,LPTSTR, int);
#ifdef _DEBUG
#define MFC_DLL_NAME _T("mfc71d.dll")
#define AFXWINMAIN_ORDINAL 1589
#else
#define MFC_DLL_NAME _T("mfc71.dll")
#define AFXWINMAIN_ORDINAL 1207
#endif

int _tmain()
{
#ifndef _AFXDLL
char _afxInitAppState = (char)(AfxInitialize(FALSE, _MFC_VER), atexit(&_AfxTermAppState));
#else
char _afxInitAppState = (char)(AfxInitialize(FALSE, _MFC_VER));
#endif
HINSTANCE hinstLib = LoadLibrary(MFC_DLL_NAME); 
AFXWINMAIN_FUNC ProcAdd;
int ret = 0;
// If the handle is valid, try to get the function address.
if (hinstLib != NULL) 

   ProcAdd = (AFXWINMAIN_FUNC) GetProcAddress(hinstLib, MAKEINTRESOURCE(AFXWINMAIN_ORDINAL));
   // If the function address is valid, call the function.
   if (NULL != ProcAdd) 
   {
    HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
    HINSTANCE hPrevInstance = NULL;
    LPTSTR lpCmdLine = NULL;
    int nCmdShow = SW_SHOWNORMAL;
    ret = (*ProcAdd)(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
   }
   // Free the DLL module.
   FreeLibrary(hinstLib); 
}
return ret;
}

需要說明的是,在GetProcAddress函數(shù)中,我們需要調(diào)用MAKEINTRESOURCE來將函數(shù)序號(hào)進(jìn)行轉(zhuǎn)化。 另外,對于AFXWINMAIN_FUNC的定義一定要加上__stdcall的調(diào)用約定,因?yàn)锳fxWinMain是采用__stdcall方式來調(diào)用的。最后還有一點(diǎn)需要注意,我們需要使用AfxInitialize來注冊退出函數(shù),否則程序?qū)⒉荒苷_退出。


 2.Q:要知道寫的lua腳本中哪行語法錯(cuò)了,即lua語法檢查

     A:

        添加粗體的兩行就能在控制臺(tái)中看到出錯(cuò)信息,并能定位到那一行

void LuaScriptModule::executeScriptFile(const String& filename, const String& resourceGroup)
{
    
// load file
    RawDataContainer raw;
    System::getSingleton().getResourceProvider()
->loadRawDataContainer(filename,
        raw, resourceGroup.empty() 
? d_defaultResourceGroup : resourceGroup);

    
// load code into lua
    int top = lua_gettop(d_state);
    
int loaderr = luaL_loadbuffer(d_state, (char*)raw.getDataPtr(), raw.getSize(), filename.c_str());
    System::getSingleton().getResourceProvider()
->unloadRawDataContainer( raw );
    
if (loaderr)
    {
        String errMsg 
= lua_tostring(d_state,-1);
        lua_settop(d_state,top);
#ifdef _DEBUG
        ::printf_s(
"[LuaScriptModule]: %s\n", errMsg.c_str());
#endif

        
throw ScriptException("Unable to execute Lua script file: '"+filename+"'\n\n"+errMsg+"\n");
    }

    
// call it
    if (lua_pcall(d_state,0,0,0))
    {
        String errMsg 
= lua_tostring(d_state,-1);
        lua_settop(d_state,top);
#ifdef _DEBUG
        ::printf_s(
"[LuaScriptModule]: %s\n", errMsg.c_str());
#endif

        
throw ScriptException("Unable to execute Lua script file: '"+filename+"'\n\n"+errMsg+"\n");
    }

    lua_settop(d_state,top); 
// just in case :P
}


3.Q:用字符集Unicode生成lua51_d.lib調(diào)用GetModuleFileName為什么會(huì)出錯(cuò)?

      

static void setprogdir (lua_State *L) {
  
char buff[MAX_PATH + 1];
  
char *lb;
  DWORD nsize 
= sizeof(buff)/sizeof(char);
  DWORD n 
= GetModuleFileName(NULL, buff, nsize);
  
if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL)
    luaL_error(L, 
"unable to get ModuleFileName");
  
else {
    
*lb = '\0';
    luaL_gsub(L, lua_tostring(L, 
-1), LUA_EXECDIR, buff);
    lua_remove(L, 
-2);  /* remove original string */
  }
}


A:  因?yàn)檎{(diào)用了GetModuleFileNameW,寬字符版本,而buff是char,buff里面就是d0 :0 /0,類似如此

#ifdef UNICODE
#define GetModuleFileName  GetModuleFileNameW
#else
#define GetModuleFileName  GetModuleFileNameA
#endif // !UNICODE

4. Q: CEGUI里面的lua如何使用?
    A:

   // 初始化
 CEGUI::LuaScriptModule
* pScriptMod = new LuaScriptModule();
 System::getSingleton().setScriptingModule(pScriptMod);

// 執(zhí)行l(wèi)ua時(shí)
System::getSingleton().executeScriptFile(
"Sample_Text.lua");

// 退出程序時(shí)
CEGUI::ScriptModule* pScriptModule = System::getSingleton().getScriptingModule();
delete pScriptModule;
pScriptModule = NULL;




 5.貼lua代碼,以后看起來方便  
我改了下CEGUI的這個(gè)例子 Sample_TextDemo

print輸出信息到控制臺(tái)

Sample_Text.lua

Lua語言: Sample_Text.lua
print("Sample_Text begin")
local guiSystem = CEGUI.System:getSingleton()
local schemeMgr = CEGUI.SchemeManager:getSingleton()
local winMgr = CEGUI.WindowManager:getSingleton();
local fontMgr = CEGUI.FontManager:getSingleton();

-- load scheme and set up defaults
schemeMgr:loadScheme("TaharezLook.scheme");
guiSystem:setDefaultMouseCursor("TaharezLook", "MouseArrow");
-- We need a font
if(false == fontMgr:isFontPresent("DejaVuSans-10")) then
fontMgr:createFont("DejaVuSans-10.font");
end
-- Font defaulting
if(fontMgr:isFontPresent("DejaVuSans-10")) then
guiSystem:setDefaultFont("DejaVuSans-10");
elseif(fontMgr:isFontPresent("Commonwealth-10")) then
guiSystem:setDefaultFont("Commonwealth-10");
end

-- load an image to use as a background
CEGUI.ImagesetManager:getSingleton():createImagesetFromImageFile("BackgroundImage", "GPN-2000-001437.tga");
-- here we will use a StaticImage as the root, then we can use it to place a background image
local background = winMgr:createWindow("TaharezLook/StaticImage", "background_wnd");
-- set position and size
local xx = CEGUI.UDim(0,0)
local yy = CEGUI.UDim(0,0)
local zz = CEGUI.UVector2(xx,yy)
background:setPosition(zz);

background:setSize(CEGUI.UVector2(CEGUI.UDim(1,0), CEGUI.UDim(1,0)));
-- disable frame and standard background
background:setProperty("FrameEnabled", "false");
background:setProperty("BackgroundEnabled", "false");
-- set the background image
background:setProperty("Image", "set:BackgroundImage image:full_image");
-- install this as the root GUI sheet
guiSystem:setGUISheet(background);

-- Load our layout as a basic
background:addChildWindow (winMgr:loadWindowLayout ("TextDemo.layout"));

print("Sample_Text OK")



 

posted on 2008-11-05 14:55 七星重劍 閱讀(2125) 評論(7)  編輯 收藏 引用 所屬分類: PL--c/c++PL--LuaC++ lib -- CEGUI

FeedBack:
# re: 整CEGUILua過程中遇到的問題及解答 2008-11-20 21:09 小不點(diǎn)
哥們 能否把CEGUI的整個(gè)帶工程的代碼發(fā)我一份,我下的一個(gè)自己創(chuàng)建工程整合,但是還是差些文件,或DLL,Thanks~  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答 2008-11-21 14:16 七星重劍
@小不點(diǎn)
還是你自己折騰折騰比較好,能學(xué)到很多項(xiàng)目管理的東西的 ^_^  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答 2008-11-23 13:15 小不點(diǎn)
OK ,thank You  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答 2008-11-24 00:49 七星重劍
@小不點(diǎn)
not at all  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答[未登錄] 2008-12-15 15:44 andy
為什么CEGUI要用LUA啊 我沒弄明白  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答 2009-08-05 22:35 輕葉迷彩
您好,我在將CEGUI與lua合并的過程中碰到了一個(gè)很久都沒有解決的問題,中文問題,具體的問題如下

為CEGUI配置中文字體后,使用C++調(diào)用和操作CEGUI,中文能夠正常的處理和顯示

例如:

Editbox * editbox = static_cast<Editbox*>(m_WinMgr.getWindow("Demo8/Window1/Controls/Editbox"));
Listbox * listbox = static_cast<Listbox*>(m_WinMgr.getWindow("Demo8/Window1/Listbox"));

CEGUI::String edit_str(editbox->getText());

ListboxTextItem* tempItem = new ListboxTextItem(edit_str);
listbox->addItem(tempItem);

testText->setText(mbcs_to_utf8((const char*)"中文測試"));

等等均可以正確的獲取到控件上輸入的中文,并設(shè)置給其它控件等.


但是將邏輯移到lua中,中文就完全不能處理了

例如:

local editbox = winMgr:getWindow("Demo8/Window1/Controls/Editbox")
local listbox = CEGUI.toListbox(winMgr:getWindow("Demo8/Window1/Listbox"))
local addbutton = winMgr:getWindow("Demo8/Window1/Controls/Add")

addbutton:setText(editbox:getText())

print(editbox:getText())

CEGUI.Logger:getSingleton():logEvent(editbox:getText())

local newItem = CEGUI.createListboxTextItem(editbox:getText())

listbox:addItem(newItem)

將全部得到亂碼

getText()得到的 能正常顯示在控件上的中文 ,用于輸出,記log,或者設(shè)置給其它控件,均顯示的是亂碼.

而在lua中單純寫入的中文可以正常顯示

print("中文測試") --正常

CEGUI.Logger:getSingleton():logEvent("中文測試") --亂碼


print是lua自己的東西,如果這樣都出亂碼,那lua也不用玩了-_-

以上現(xiàn)象分析: lua與cegui的編碼格式可能不同,lua與cegui交互,從cegui獲得的中文字符串,或傳給cegui的中文字符串,兩方均不能正常解析,彼此都認(rèn)不出,都為亂碼.

嘗試在lua中將中文字符串編碼方式轉(zhuǎn)換后再發(fā)送給cegui, lua的字符串編碼, 要么為ascii,要么為unicode
cegui::string的編碼方式, 目前已知的有,接收utf8的構(gòu)造函數(shù)

所以,寫了N個(gè)編碼轉(zhuǎn)換函數(shù)進(jìn)行嘗試
AsciiToUnicode , AsciiToUtf8 , unicodeToUtf8 , ..............
(均進(jìn)行了測試,轉(zhuǎn)換正確)

然后將這些函數(shù)導(dǎo)入到lua中

EditBox:setText(AsciiToUnicode(str))
EditBox:setText(AsciiToUtf8(str))
EditBox:setText(unicodeToUtf8(str))

幾乎常用的所有編碼能試的全試了,結(jié)果只是亂碼更亂....  回復(fù)  更多評論
  
# re: 整CEGUILua過程中遇到的問題及解答 2009-08-07 11:18 七星重劍
@輕葉迷彩
目前我們項(xiàng)目都是在c++里面配置控件的,所以沒碰到老大的這個(gè)問題。
以后估計(jì)會(huì)把界面控件相關(guān)的代碼放到lua里面。  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲欧美日韩国产综合| 欧美福利视频在线| 免费一级欧美片在线观看| 91久久在线| 亚洲欧美亚洲| 免费在线播放第一区高清av| 欧美色图麻豆| 亚洲大片av| 亚洲欧美日韩一区二区三区在线观看| 久久久精品动漫| 亚洲精品国产系列| 欧美中文字幕在线| 欧美日韩国产片| 一区二区在线观看av| 亚洲一区二区三区中文字幕| 免费的成人av| 亚洲一区二区在线| 欧美激情一区在线观看| 国产在线欧美| 亚洲欧美日韩一区二区在线| 亚洲福利视频三区| 久久精品国产第一区二区三区| 欧美日韩国产首页在线观看| 精品不卡视频| 欧美一级片在线播放| 亚洲欧洲一区二区三区在线观看| 欧美一区二区精品在线| 欧美视频一区二区三区…| 亚洲国产精品电影| 久久国产日韩| 亚洲视频精选| 欧美日韩国产电影| 亚洲激情不卡| 老司机亚洲精品| 午夜精品亚洲一区二区三区嫩草| 欧美日韩第一区日日骚| 亚洲二区精品| 老司机午夜精品视频| 亚洲欧美日本国产有色| 欧美日韩一区二区三区四区在线观看 | 欧美资源在线观看| 99国产一区二区三精品乱码| 免费观看一区| 136国产福利精品导航网址应用| 欧美一区二区三区视频在线| 99精品免费视频| 欧美全黄视频| 亚洲理伦电影| 亚洲国产另类精品专区| 久久婷婷国产综合国色天香| 国产视频丨精品|在线观看| 亚洲综合精品自拍| 日韩午夜在线播放| 欧美精品在线观看| 亚洲麻豆一区| 最新日韩欧美| 欧美精品首页| 99精品欧美一区| 亚洲精品综合| 欧美日韩亚洲91| 一区二区三区视频在线看| 亚洲人精品午夜在线观看| 欧美电影免费观看网站| 91久久夜色精品国产九色| 欧美国产精品v| 免费日本视频一区| 亚洲精品综合| 亚洲精品国偷自产在线99热| 欧美精品18+| 在线亚洲精品福利网址导航| 99视频热这里只有精品免费| 欧美日韩综合不卡| 午夜一区二区三区不卡视频| 亚洲免费视频观看| 国产亚洲成av人片在线观看桃| 久久成人一区| 久久久久网站| 亚洲精品一线二线三线无人区| 亚洲欧洲精品一区| 国产精品成人观看视频免费| 亚洲欧美一级二级三级| 欧美一级片一区| 在线欧美日韩精品| 亚洲人成免费| 国产精品免费网站| 久久综合九色99| 欧美国产一区二区| 亚洲尤物视频网| 欧美在线视频网站| 亚洲人成在线观看一区二区| 亚洲美女黄色| 国产深夜精品福利| 欧美激情网友自拍| 欧美视频在线看| 久久久久久久一区二区三区| 久久一区视频| 亚洲视频福利| 欧美中文在线视频| 亚洲精品在线三区| 亚洲午夜激情网页| 影音先锋亚洲精品| 99国产麻豆精品| 国产亚洲成年网址在线观看| 亚洲第一网站免费视频| 欧美性大战xxxxx久久久| 久久久噜噜噜久久中文字幕色伊伊 | 午夜精品区一区二区三| 久久精品国产一区二区三区| 一本色道久久99精品综合| 亚洲综合日本| 亚洲精品国产欧美| 亚洲免费中文| 亚洲精品视频在线观看网站| 亚洲小说春色综合另类电影| 亚洲风情亚aⅴ在线发布| 这里只有精品电影| 亚洲国产你懂的| 亚洲一区二区精品在线| 亚洲国产精品久久久久| 亚洲在线视频观看| 亚洲国产一区二区a毛片| 亚洲视频网站在线观看| 亚洲国产精品第一区二区三区| 亚洲一区二区三区三| 亚洲欧洲精品一区| 欧美一级视频| 亚洲一区二区三区免费在线观看 | 激情懂色av一区av二区av| 亚洲麻豆一区| 亚洲电影免费观看高清完整版在线| 在线视频欧美日韩| 亚洲激情电影中文字幕| 亚洲欧美日韩天堂| 一区二区精品国产| 久久在线观看视频| 久久国产天堂福利天堂| 欧美色偷偷大香| 亚洲国产精品久久久久秋霞蜜臀| 国产亚洲福利社区一区| 一本色道久久88亚洲综合88| 亚洲国产精品一区二区久| 欧美一区三区二区在线观看| 亚洲网站视频| 欧美暴力喷水在线| 麻豆免费精品视频| 国产日本精品| 亚洲一区二区三区四区中文| 日韩一级精品视频在线观看| 久久青青草综合| 久久久久亚洲综合| 国产麻豆综合| 亚洲无线视频| 亚洲一区日韩在线| 欧美另类一区| 亚洲高清久久久| 亚洲国产日韩在线一区模特| 久久精品91久久香蕉加勒比| 欧美一区二区视频网站| 欧美性色综合| 妖精成人www高清在线观看| 亚洲久久成人| 欧美激情第五页| 亚洲国产精品va在线看黑人| 亚洲高清在线播放| 久久夜色精品国产| 免费观看久久久4p| 曰韩精品一区二区| 久久久99精品免费观看不卡| 久久久久久婷| 韩国福利一区| 久久久久久亚洲精品中文字幕| 久久国产精品99久久久久久老狼| 国产精品视频一区二区三区| 中文日韩电影网站| 午夜精品福利一区二区蜜股av| 国产精品高精视频免费| 一区二区欧美在线| 亚洲欧美成人网| 国产精品女人网站| 亚洲欧美激情一区| 久久精品免费看| 精品不卡视频| 欧美1区2区3区| 最新69国产成人精品视频免费| 99这里只有精品| 欧美性一区二区| 亚洲专区免费| 久久欧美中文字幕| 亚洲国产精品精华液2区45| 欧美成人三级在线| 亚洲精品一区在线| 亚洲永久网站| 国产亚洲人成a一在线v站| 久久精品中文| 亚洲国产欧美一区| 亚洲自拍啪啪| 国产一区二区| 牛牛精品成人免费视频| 99re66热这里只有精品4| 性伦欧美刺激片在线观看|