日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++中插件使用举例

發布時間:2023/11/27 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中插件使用举例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插件并不是在構建時鏈接的,而是在運行時發現并加載的。因此,用戶可以利用你定義好的插件API來編寫自己的插件。這樣他們就能以指定方式擴展API的功能。插件庫是一個動態庫,它可以獨立于核心API編譯,在運行時根據需要顯示加載。不過插件也可以使用靜態庫,比如在嵌入式系統中,所有插件都是在編譯時靜態鏈接到應用程序中的。

你總是可以引入自己的插件文件擴展名。例如,Adobe Illustrator使用的插件擴展名是.aip,而Microsoft Excel插件的擴展名是.xll。

很多商業化軟件包都允許使用C/C++插件擴展其核心功能。在API中采樣插件模型有以下優點:

(1).更為通用:使你的API可以用于解決更大范圍內的問題,而不需要為所有問題提供解決方案。

(2).更新量小:以插件形式存在的功能很容易獨立于應用程序而更新,只需引入新版本的插件即可。相比發布整個應用程序的新版本,這種方式的更新量要小得多。

一般而言,如果要創建插件系統,有兩個主要特性是必須要設計的:

(1).插件API:要創建插件,用戶必須編譯并鏈接插件API。插件API是你提供給用戶的用于創建插件的接口。

(2).插件管理器:這是核心API代碼中的一個對象(一般設計為單例),負責管理所有插件的生命周期,即插件的加載、注冊和卸載等各個階段。該對象也叫做插件注冊表。

當為API設計插件時,一些設計決策會影響插件系統的精確架構:

(1).C還是C++:C++規范并沒有明確地定義ABI。因此,不同的編譯器,甚至同一編譯器的不同版本,生成的代碼可能無法做到二進制兼容。這就暗示我們,對插件系統而言,如果客戶在開發插件時使用了一個ABI不同的編譯器,那么這樣的插件可能無法加載。相反,純C代碼的ABI有明確的含義,可以跨平臺和跨編譯器工作。

(2).版本控制:需要確定某插件構建時使用的API版本是否與你的API版本兼容。

(3).內部元數據還是外部元數據:元數據,比如可讀的名字和版本信息,既可以在插件代碼內部定義,也可以通過一種簡單的外部文件格式指定。使用外部元數據的優點是,并不需要加載所有插件,就能了解所有可用對象的集合。

(4).插件管理器是通用的還是專用的:插件管理器的一種實現方法是,使它的層次非常低,實現通用性,也就是說,它只是簡單地加載插件并訪問其中的符號。然而,這樣做意味著插件管理器不了解API中是否存在具體類型。其結果是對象可能必須以void*指針的形式返回,在使用之前再轉化為具體的類型。或者,插件管理器可以以最低限度前向聲明插件中任何對象的類型,這種方案的類型安全性更好,但也正因如此,它無法獨立于你的API而實現。

(5).安全性:你必須決定你對用戶插件的信任程度。插件是可以運行在進程之中的任意編譯過的代碼。因此,插件有可能做任何事情,包括訪問它不應該訪問的數據,以及刪除最終用戶硬盤上的文件,甚至讓整個應用程序奔潰。如果你需要防護這種惡意插件,可以考慮創建一種基于套接字的方案,使插件運行在獨立的進程中,通過IPC通道與核心API通信。

(6).靜態庫還是動態庫:插件也可以定義為靜態庫,這意味著插件必須編譯到應用程序中。對消費型應用程序而言,更常見的方案是采用動態庫,因為用戶可以編寫自己的插件,并且在運行時擴展應用程序。編寫靜態插件還有一個約束,你必須確保任意兩個插件中沒有定義相同的符號,也就是說,每個插件中初始化函數的命名必須是唯一的。

因為跨平臺和跨編譯器的ABI問題,支持C++插件有些困難,有些方法可以在插件中更安全地使用C++:

(1).使用抽象基類:實現抽象基類的虛方法可以使插件與ABI問題隔離,因為虛方法調用通常是用類的虛函數表中的索引來表示的。

(2).自由函數使用C鏈接:為了避免C++ ABI問題,插件API中的所有全局函數都要使用C鏈接方式,也就是說,它們應該使用extern “C”聲明。同理,為了最大化可移植性,插件傳遞給核心API的回調函數也應該使用C鏈接方式。

(3).避免使用STL和異常:STL類(如std::string和std::vector)的不同實現可能不是ABI兼容的。因此,核心API與插件API之間的函數調用應該盡量避免使用這些容器。同樣,因為不同編譯器之間異常的ABI往往也是不穩定的,所以在你的插件API中也應該避免。

(4).不要混用內存分配器:插件鏈接的內存分配器可能與你的API不同。要么所有的對象由插件分配并回收,要么將控制傳給核心API,由核心API負責所有對象的創建與銷毀。但核心API絕對不要釋放插件分配的對象,反之亦然。

插件API:插件API是你提供給用戶的用于創建插件的接口。當核心API加載一個插件時,為了讓插件正常工作,它需要知道應該調用哪個函數或者要訪問哪個符號。這意味著插件中應該明確定義具名的入口點,用戶在創建插件時必須提供。這一點可以以不同的方式實現。

插件管理器:需要處理以下任務:

(1).加載所有插件的元數據:這些元數據既可以保存在單獨的文件中(比如xml文件),也可以嵌入到插件內部。如果是后一種情況,為了收集所有插件的元數據,插件管理器需要加載所有可用的插件。你可以以元數據的形式向用戶提供可用插件列表,以供他們選擇。

(2).將動態庫加載到內存中,提供對庫中符號的訪問能力,并在必要時卸載庫。在Unix(也包括Mac OSX)平臺上,這會涉及dlopen、dlclose、dlsym等函數,而在Windows平臺上,涉及的是LoadLibrary、FreeLibrary及GetProcAddress等函數。

(3).當插件加載時,調用其初始化例程;而當插件卸載時,調用其清理例程。

因為插件管理器為系統中的所有插件提供了單一訪問點,所以它往往以單例模式實現。從設計角度看,我們可以將插件管理器看做一組插件實例的集合,其中每個插件實例表示一個插件,并提供了加載和卸載該插件的功能。

插件版本控制:既可以讓插件使用與核心API相同的版本號,也可以為其引入專門的插件API版本號。我建議采用后者,因為插件API實際上是從核心API分離出來的接口,兩者可能以不同的頻率修改。除此之外,用戶可以選擇指定該插件支持的API的最小版本號和最大版本號。更普遍的做法是指定最小版本號。最小/最大版本號也可以通過外部元文件格式指定。

注:以上內容摘自《C++ API設計

以下是測試代碼:組織結構如下圖所示:

src目錄下存放所有的API和核心庫code,common.hpp中的接口可認為是核心API,plugin.hpp中為插件API,編譯此目錄可生成動態庫address。

plugin目錄下存放插件API的實現,編譯此目錄可生成一個名字為plugin_area.fbc的插件。

tests目錄為調用核心API和插件API的code,用來驗證生成動態庫address和插件plugin_area.fbc的正確性。

可通過配置文件如json或xml來指定需要加載的插件,在code中解析此配置文件,這樣替換插件時可無需重新編譯,直接修改配置文件即可。

通過腳本build.sh和CMakeLists.txt來編譯測試代碼,執行build.sh 0生成plugin_area.fbc插件,執行build.sh 1生成address動態庫和執行文件Plugin_Test。插件和動態庫/執行文件的生成是獨立的,它們在編譯生成時無任何依賴關系。

各個文件內容如下:

plugin/plugin_area.cpp:

#include <string.h>
#include <iostream>
#include <string>
#include <stdexcept>
#include "plugin.hpp"class Area : public Base {
public:Area() = default;~Area() = default;const char* version() override { return "1.0.0"; }const char* name() override { return "plugin_area"; }int get_area(const fbc_rect_t& rect) override { return ((rect.right - rect.left) * (rect.bottom - rect.top) + 10); }
};#ifdef __cplusplus
extern "C" {
#endifFBC_API Base* get_plugin_instance(const char* name)
{Area* area = new Area();if (strcmp(area->name(), name) != 0) {fprintf(stderr, "plugin name mismatch: %s, %s\n", area->name(), name);delete area;throw std::runtime_error("plugin name mismatch");return nullptr;}return area;
}FBC_API std::string get_plugin_name_version(Base* handle)
{if (!handle) {fprintf(stdout, "handle cann't equal nullptr\n");throw std::runtime_error("handle cann't equal nullptr");return "";}Area* area = dynamic_cast<Area*>(handle);std::string str(area->name());str += ".fbc.";str += area->version();return str;
}FBC_API void release_plugin_instance(Base* handle)
{delete dynamic_cast<Area*>(handle);
}#ifdef __cplusplus
}
#endif 

src/common.hpp:

#ifndef FBC_PLUGIN_TEST_COMMON_HPP_
#define FBC_PLUGIN_TEST_COMMON_HPP_#ifdef _MSC_VER#ifdef DLL_EXPORTS#define FBC_API __declspec(dllexport)#else#define FBC_API#endif // _MSC_VER
#else#ifdef DLL_EXPORTS#define FBC_API __attribute__((visibility("default")))#else#define FBC_API#endif
#endiftypedef struct fbc_rect_t {int left, top;int right, bottom;
} fbc_rect_t;FBC_API char* get_csdn_blog_address();
FBC_API char* get_github_address();#endif // FBC_PLUGIN_TEST_COMMON_HPP_

src/common.cpp:

#include "common.hpp"FBC_API char* get_csdn_blog_address()
{return "https://blog.csdn.net/fengbingchun";
}FBC_API char* get_github_address()
{return "https://github.com//fengbingchun";
}

src/plugin.hpp:

#ifndef FBC_PLUGIN_TEST_PLUGIN_HPP_
#define FBC_PLUGIN_TEST_PLUGIN_HPP_#include "common.hpp"class Base {
public:virtual const char* version() = 0;virtual const char* name() = 0;virtual int get_area(const fbc_rect_t& rect) = 0;virtual ~Base() = default;
};#ifdef __cplusplus
extern "C" {
#endifFBC_API Base* get_plugin_instance(const char* name);
FBC_API std::string get_plugin_name_version(Base* handle);
FBC_API void release_plugin_instance(Base* handle);#ifdef __cplusplus
}
#endif #endif // FBC_PLUGIN_TEST_PLUGIN_HPP_

test/test.cpp:

#include <iostream>
#include <string>
#include <stdexcept>
#ifdef _MSC_VER
#include <windows.h>
#else
#include <dlfcn.h>
#endif
#include "common.hpp"
#include "plugin.hpp"int main()
{// test general dynamic libraryfprintf(stdout, "csdn blog address: %s\n", get_csdn_blog_address());fprintf(stdout, "github address: %s\n", get_github_address());// test pluginconst std::string plugin_name {"plugin_area"}, plugin_suffix {"fbc"};fbc_rect_t rect = {1, 2, 31, 52};#ifdef _MSC_VERHINSTANCE handle = LoadLibrary((plugin_name+"."+plugin_suffix).c_str());if (!handle) {fprintf(stderr, "fail to load plugin: %s, %d\n", plugin_name.c_str(), GetLastError());return -1;}typedef Base* (*LPGETINSTANCE)(const char* name);LPGETINSTANCE lpGetInstance = (LPGETINSTANCE)GetProcAddress(handle, "get_plugin_instance");if (!lpGetInstance) {fprintf(stderr, "fail to GetProcAddress: get_plugin_instance, %d\n", GetLastError());return -1;}Base* instance = nullptr;try {instance = (*lpGetInstance)(plugin_name.c_str());fprintf(stdout, "plugin name: %s, version: %s\n", instance->name(), instance->version());} catch (const std::exception& e) {fprintf(stderr, "exception: %s\ntest fail\n", e.what());return -1;}fprintf(stdout, "area: %d\n", instance->get_area(rect));typedef std::string (*LPVERSIONNAME)(Base* base);LPVERSIONNAME lpVersionName = (LPVERSIONNAME)GetProcAddress(handle, "get_plugin_name_version");if (!lpVersionName) {fprintf(stderr, "fail to GetProcAddress: get_plugin_name_version, %d\n", GetLastError());return -1;}try {fprintf(stdout, "plugin name version: %s\n", (*lpVersionName)(instance).c_str());} catch (const std::exception& e) {fprintf(stderr, "exception: %s\ntest fail\n", e.what());return -1;}typedef void (*LPRELEASEINSTANCE)(Base* base);LPRELEASEINSTANCE lpReleaseInstance = (LPRELEASEINSTANCE)GetProcAddress(handle, "release_plugin_instance");if (!lpReleaseInstance) {fprintf(stderr, "fail to GetProcAddress: release_plugin_instance, %d\n", GetLastError());return -1;}fprintf(stdout, "destroy Base\n");(*lpReleaseInstance)(instance);FreeLibrary(handle);
#elsevoid* handle = dlopen((plugin_name+"."+plugin_suffix).c_str(), RTLD_LAZY);if (!handle) {fprintf(stderr, "fail to load plugin: %s\n", plugin_name.c_str());return -1;}typedef Base* (*pGetInstance)(const char* name);pGetInstance pInstance = (pGetInstance)dlsym(handle, "get_plugin_instance");if (!pInstance) {fprintf(stderr, "fail to dlsym: get_plugin_instance\n");return -1;}Base* instance = nullptr;try {instance = (*pInstance)(plugin_name.c_str());fprintf(stdout, "plugin name: %s, version: %s\n", instance->name(), instance->version());} catch (const std::exception& e) {fprintf(stderr, "exception: %s\ntest fail\n", e.what());return -1;}fprintf(stdout, "area: %d\n", instance->get_area(rect));typedef std::string (*pVersionName)(Base* base);pVersionName pvername = (pVersionName)dlsym(handle, "get_plugin_name_version");if (!pvername) {fprintf(stderr, "fail to dlsym: get_plugin_name_version\n");return -1;}try {fprintf(stdout, "plugin name version: %s\n", (*pvername)(instance).c_str());} catch (const std::exception& e) {fprintf(stderr, "exception: %s\ntest fail\n", e.what());return -1;}typedef void (*pReleaseInstance)(Base* base);pReleaseInstance prelins = (pReleaseInstance)dlsym(handle, "release_plugin_instance");if (!prelins) {fprintf(stderr, "fail to dlsym: release_plugin_instance\n");return -1;}fprintf(stdout, "destroy Base\n");(*prelins)(instance);dlclose(handle);
#endiffprintf(stdout, "test finish\n");return 0;
}

build.sh:

#! /bin/bashusage() {echo "usage: $0 param"echo "if build plugin, then execute: $0 0"echo "if build src and test, then execute: $0 1"exit -1
}if [ $# != 1 ]; thenusage
fireal_path=$(realpath $0)
echo "real_path: ${real_path}"
dir_name=`dirname "${real_path}"`
echo "dir_name: ${dir_name}"build_dir=${dir_name}/build
mkdir -p ${build_dir}
cd ${build_dir}
if [ "$(ls -A ${build_dir})" ]; thenecho "directory is not empty: ${build_dir}"
elseecho "directory is empty: ${build_dir}"
fiplatform=`uname`
echo "##### current platform: ${platform}"if [ ${platform} == "Linux" ]; thenif [ $1 == 0 ]; thenecho "########## build plugin ##########"cmake -DBUILD_PLUGIN=ON ..elif [ $1 == 1 ]; thenecho "########## build src and test ##########"cmake -DBUILD_PLUGIN=OFF ..elseusagefimake
elseif [ $1 == 0 ]; thenecho "########## build plugin ##########"cmake -G"Visual Studio 15 2017" -A x64 -DBUILD_PLUGIN=ON ..elif [ $1 == 1 ]; thenecho "########## build src and test ##########"cmake -G"Visual Studio 15 2017" -A x64 -DBUILD_PLUGIN=OFF ..elseusageficmake --build . --target ALL_BUILD --config Release
ficd -

CMakeLists.txt:

PROJECT(Plugin_Test)
CMAKE_MINIMUM_REQUIRED(VERSION 3.9)SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=gnu++0x")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++0x")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -std=gnu++0x")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x -Wall -O2")SET(PATH_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/./../../../demo/Plugin_Test/demo1/test)
SET(PATH_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/./../../../demo/Plugin_Test/demo1/src)
SET(PATH_PLUGIN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/./../../../demo/Plugin_Test/demo1/plugin)INCLUDE_DIRECTORIES(${PATH_SRC_DIR})FILE(GLOB_RECURSE PLUGIN_CPP_LIST ${PATH_PLUGIN_DIR}/*.cpp)
FILE(GLOB_RECURSE SRC_CPP_LIST ${PATH_SRC_DIR}/*.cpp)
FILE(GLOB_RECURSE TEST_CPP_LIST ${PATH_TEST_DIR}/*.cpp)ADD_DEFINITIONS(-DDLL_EXPORTS)IF(BUILD_PLUGIN)MESSAGE(STATUS "########## BUILD PLUGIN ##########")ADD_LIBRARY(plugin_area SHARED ${PLUGIN_CPP_LIST})SET_TARGET_PROPERTIES(plugin_area PROPERTIES PREFIX "" SUFFIX ".fbc")
ELSE()MESSAGE(STATUS "########## BUILD SRC AND TEST ##########")#SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # can generate address.lib in windowsADD_LIBRARY(address SHARED ${SRC_CPP_LIST})  ADD_EXECUTABLE(Plugin_Test ${TEST_CPP_LIST})IF(WIN32)TARGET_LINK_LIBRARIES(Plugin_Test address)ELSE()TARGET_LINK_LIBRARIES(Plugin_Test address dl)ENDIF()
ENDIF()

此測試代碼可同時在Windows和Linux下執行。

在Windows下執行結果如下:

在Linux下執行結果如下:

GitHub:https://github.com/fengbingchun/Messy_Test

總結

以上是生活随笔為你收集整理的C++中插件使用举例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91九色最新 | 国产在线观看免费观看 | 久久精品国产第一区二区三区 | 深爱激情亚洲 | 成人中心免费视频 | 天堂av官网 | 午夜精品久久久久久久99热影院 | 91亚洲精品国偷拍自产在线观看 | 青草视频在线 | 麻豆国产在线播放 | 97**国产露脸精品国产 | 99免费精品视频 | 视频国产精品 | 久久免费高清视频 | 天天操综 | 亚洲综合小说 | 亚洲激情在线播放 | 久久久免费精品国产一区二区 | 亚洲精品视频在 | 国产手机在线观看视频 | 国产精品99蜜臀久久不卡二区 | 五月天色综合 | 免费看的黄色的网站 | 97在线精品 | 8x8x在线观看视频 | 麻花天美星空视频 | 亚洲第一区精品 | 国产精品久久久久久久久久不蜜月 | 国产乱对白刺激视频在线观看女王 | 日韩精品免费专区 | 久久av中文字幕片 | 天天色天天综合 | www.夜夜干.com| 国产成人一区二区三区在线观看 | 婷婷六月丁香激情 | 亚洲综合在线发布 | 成年人在线播放视频 | 国产免费久久av | 五月婷婷香蕉 | 精品视频在线免费 | 免费精品久久久 | 亚洲永久精品在线观看 | av在线播放不卡 | 成年人电影毛片 | www.亚洲激情.com | 久热av| 丁香六月婷婷激情 | 亚洲精品久久久蜜桃 | 久久成人久久 | 嫩草伊人久久精品少妇av | 九九视频免费观看视频精品 | 国内精品久久久久 | 国产精品久久久久久久久久了 | av片一区二区 | 一级黄网 | 色偷偷88欧美精品久久久 | 黄色在线观看污 | 亚洲欧美色婷婷 | 中文字幕在线视频一区二区 | www.夜夜操 | 天天色天天色天天色 | 91精品久久久久久久久久入口 | 亚洲专区一二三 | 这里只有精品视频在线观看 | 91cn国产在线| 久久精品中文视频 | 国产精品免费在线观看视频 | 一色屋精品视频在线观看 | 在线亚洲日本 | 亚洲成av人片一区二区梦乃 | 国产精品久久久久9999吃药 | 国产美女视频一区 | 亚洲三区在线 | 欧美污在线观看 | 97视频亚洲 | 五月天婷婷在线观看视频 | 91av视频观看 | 国产精品黄色影片导航在线观看 | 亚洲国产精品视频 | 又黄又刺激视频 | 亚洲天天综合 | 亚洲国产日韩精品 | 欧美日韩在线精品一区二区 | 在线观看黄色大片 | 88av色| 久久久www成人免费毛片麻豆 | 黄色一级大片在线观看 | 国产拍在线 | 天天操天天色天天射 | 国产亚洲免费的视频看 | 久久这里精品视频 | www.com黄色 | 国产成人91 | 欧美久草网 | 日韩激情片在线观看 | 久久桃花网 | 三级黄色在线观看 | 中文字幕亚洲精品日韩 | 国产精品一区在线播放 | 久久久久久久国产精品 | 国产成人福利片 | 久久99精品国产麻豆宅宅 | 免费视频91 | 久久国产精品一二三区 | av天天干 | 亚洲综合射 | 国产在线观看xxx | 成人黄色免费观看 | 久久尤物电影视频在线观看 | 综合久久久久久久 | 欧美国产亚洲精品久久久8v | 久久久污 | 久久午夜精品视频 | 免费av在线网 | 亚洲不卡av一区二区三区 | 久久精品一二三区白丝高潮 | 在线观看的a站 | 一区二区三区四区在线免费观看 | 偷拍精品一区二区三区 | 国产人成一区二区三区影院 | 人人爽人人爽人人片av | 精品99久久 | 国产日韩欧美在线看 | 国产在线一区二区 | 亚洲精品在线观看视频 | 草久视频在线观看 | 成人avav | 超碰97在线人人 | 欧美五月婷婷 | 亚洲精品免费在线视频 | 久草久热| 久九视频| 欧美先锋影音 | 在线成人性视频 | 婷婷丁香av | 亚洲韩国一区二区三区 | 99久久精品免费看国产四区 | 青青啪 | 99久久精品久久亚洲精品 | 久久久久久麻豆 | 久久久久久综合网天天 | 日韩欧美在线第一页 | 中文字幕日韩伦理 | 欧美日高清视频 | 亚洲三级在线 | 午夜狠狠干 | 日韩在线视频线视频免费网站 | 国产亚洲精品综合一区91 | 亚洲视频观看 | 在线天堂中文www视软件 | 欧美午夜视频在线 | 日韩在线视频线视频免费网站 | 4438全国亚洲精品在线观看视频 | 九九视频网站 | 免费观看黄色12片一级视频 | 欧美精品天堂 | 久久久久免费精品视频 | 中文字幕在线免费看线人 | 免费在线激情电影 | 色欧美成人精品a∨在线观看 | 美女视频黄是免费的 | 91精品少妇偷拍99 | 91精品夜夜 | 亚洲少妇久久 | 高清日韩一区二区 | 啪啪av在线 | 91精品伦理| 久久激情视频免费观看 | 黄色在线观看免费网站 | 久久久久久久av麻豆果冻 | 国产传媒一区在线 | 欧美在线视频a | 国产成人一区二区三区久久精品 | 国产精品一区二区三区视频免费 | 日韩中文在线电影 | 在线观看视频国产一区 | 日韩精品在线播放 | 国产精品一区二区三区在线 | 国产精品乱码高清在线看 | 亚洲精品a区 | 在线观看日韩国产 | 色国产精品一区在线观看 | 日韩中文在线观看 | 亚洲精品毛片一级91精品 | 久草在线费播放视频 | 天天干人人插 | 欧美一级小视频 | 国产在线欧美日韩 | 婷婷久久精品 | 欧美韩国日本在线 | 97香蕉久久超级碰碰高清版 | 亚洲人人爱 | 91网站在线视频 | 国产在线国偷精品产拍免费yy | 欧美一级免费片 | 69国产精品成人在线播放 | 色av资源网 | 一区二区视频播放 | 国产精品爽爽爽 | 天天天天天天天操 | 国产精品免费视频网站 | 国产精品成人久久久久久久 | 国产黑丝一区二区三区 | 九九综合九九综合 | 欧美在线a视频 | 国产麻豆剧传媒免费观看 | av免费看在线 | 成人av影视在线 | 干干操操| 国产伦精品一区二区三区无广告 | 亚洲精品美女久久久 | 美女免费av| 久草网首页 | 免费日韩一区二区 | 国产精品成人一区二区 | 一级免费黄色 | 九九九九色 | 天天色中文 | 国产精品一区二区久久精品 | 香蕉视频在线观看免费 | 美女av在线免费 | 欧美精品日韩 | 中国一级片在线 | 91在线中文字幕 | 久久久久久久久久久免费 | 99免费看片| www.精选视频.com | 9在线观看免费高清完整版 玖玖爱免费视频 | 日韩av三区| 亚洲精区二区三区四区麻豆 | 国产日产av | 久插视频 | 2023国产精品自产拍在线观看 | 高清久久久久久 | 97在线观看 | 久久久久亚洲精品成人网小说 | 在线韩国电影免费观影完整版 | 国产91学生粉嫩喷水 | 久久久精品国产免费观看同学 | 国产精品自产拍在线观看中文 | 国产美腿白丝袜足在线av | 亚洲一级免费电影 | 97精品在线视频 | 亚洲一二三在线 | 欧美日韩国产亚洲乱码字幕 | 91精品久久久久久综合乱菊 | 国产不卡毛片 | 欧美成人h版电影 | 深爱激情站 | 狠狠综合| 日本动漫做毛片一区二区 | 天天摸天天弄 | 日韩高清免费在线 | 不卡精品| 久久久久久久久久久久99 | 日日夜操 | 久久99久久99 | 亚洲干视频在线观看 | 亚洲综合精品在线 | 久久久久精 | 免费的黄色av| 在线91观看 | 国产精品毛片一区二区在线看 | 18网站在线观看 | 国产精品久久久久影院日本 | www五月婷婷 | 福利区在线观看 | 国产精品福利午夜在线观看 | 中文字幕一区二区三区四区视频 | 中国一区二区视频 | 亚洲不卡av一区二区三区 | 日韩激情片在线观看 | 久久久久久久久久电影 | 欧美日韩视频在线观看免费 | 色国产精品 | 亚洲国产视频在线 | 91日韩精品视频 | 九九九电影免费看 | 久久成人国产精品入口 | 999久久久免费精品国产 | 亚洲综合婷婷 | 国产精品久久久999 国产91九色视频 | 色婷婷狠狠干 | 亚洲精品久久久久www | 激情一区二区三区欧美 | 97免费| 香蕉影视app | 久久久久久久久久久久影院 | 国产精品一区二区白浆 | 久久成人一区二区 | 中国一级片视频 | 天天操天天添天天吹 | 人人澡人摸人人添学生av | 日韩中文在线视频 | 久久a热6 | 狠狠色丁香婷综合久久 | 99热精品国产一区二区在线观看 | 国产永久免费高清在线观看视频 | 九九99| 一区二区国产精品 | 欧美日韩免费网站 | 色91在线 | 精品一区二区免费视频 | 人人爽人人舔 | 婷婷色社区 | 男女激情免费网站 | 91亚洲欧美激情 | 久久久天堂| 手机av在线不卡 | 成人黄色片免费 | 日韩精品一区二区三区外面 | 国产精品久久久久久久久久久久久久 | 九九热在线精品 | 香蕉视频在线免费 | 国产精品美女久久久久久久网站 | 国产成人av免费在线观看 | 欧美性性网 | 激情欧美xxxx| 最近中文字幕免费大全 | 色婷婷六月天 | 九九视频免费观看视频精品 | www.色婷婷.com| av资源免费在线观看 | 91高清视频免费 | 国产麻豆精品传媒av国产下载 | 日韩精品中文字幕在线观看 | 国产区精品 | 成人午夜在线电影 | 一区二区 不卡 | 成年人视频在线 | 中文字幕有码在线 | 成人手机在线视频 | 国产视频日韩视频欧美视频 | 国产午夜精品福利视频 | 久久久精品视频成人 | 亚洲丁香日韩 | 日韩久久精品一区二区 | 狠狠狠狠狠狠操 | 97超碰总站 | 国产h片在线观看 | 麻豆va一区二区三区久久浪 | 亚洲国产影院av久久久久 | 亚洲三级av | 日韩免费一区二区在线观看 | 久久久久久影视 | 欧美最新大片在线看 | 亚洲一区视频免费观看 | 天天·日日日干 | 免费观看久久久 | 久久优 | 国产亚洲片 | 日韩免费观看一区二区三区 | 人人爽人人爽人人片av免 | 欧美日韩三级 | 国产高清免费在线观看 | 久久天天综合网 | 精品专区一区二区 | 国产你懂的在线 | 97在线观视频免费观看 | 看毛片网站 | 在线综合色 | 一区二区三区四区在线免费观看 | 久久美女免费视频 | 日韩欧在线 | 日日夜夜爱 | 黄色三级在线看 | 91看片网址 | 亚洲va在线va天堂va偷拍 | 日日躁天天躁 | 欧美性网站 | 国产视频一二三 | 激情五月看片 | 大荫蒂欧美视频另类xxxx | 欧美激情视频一区二区三区 | 精品国产一区二区三区久久久 | 99久久毛片 | 久久美女视频 | 不卡av电影在线 | 亚洲欧美偷拍另类 | 精品一区电影 | 色吧久久 | 99热都是精品 | 日韩av免费在线看 | 久久99久久精品国产 | 日韩视频一 | 久久人91精品久久久久久不卡 | 久久精品91视频 | 久久国产一区二区三区 | 午夜视频色 | 成人三级av | 91av视频 | 亚洲视频 一区 | 免费a v网站| 日日爽日日操 | 成人综合婷婷国产精品久久免费 | 色综合网在线 | www色综合| 天天操偷偷干 | 麻豆一区二区 | 韩日电影在线观看 | 日韩精品 在线视频 | 亚洲国产免费网站 | 日韩欧美视频免费观看 | 看av在线| 有码中文字幕 | 狠狠天天 | 久久精品成人欧美大片古装 | 久久免费视频国产 | 国产中文字幕视频在线观看 | 99亚洲精品 | 国产a网站 | 日本黄色免费在线 | 国产精品 亚洲精品 | 亚洲一级片在线看 | 99热网站| 久草手机视频 | 操久久免费视频 | 三级a毛片 | 天天操天天操天天爽 | 国产午夜精品久久久久久久久久 | 免费碰碰 | 在线观看国产麻豆 | 精品久久久久久亚洲综合网站 | 天天爽天天摸 | 91插插视频 | 日韩高清在线不卡 | 久久99久久99精品中文字幕 | 亚洲伊人天堂 | 久久福利影视 | 日韩资源在线播放 | 国产精品色视频 | 国产精品视频地址 | 国色综合 | 久久免费视频6 | 亚洲国产成人久久综合 | 免费看的毛片 | 久久爱导航 | 日韩精品在线一区 | 欧美精品在线观看免费 | 欧洲精品视频一区二区 | 91亚洲精品国产 | www.久艹| 九九色在线| 欧美精品一区二区在线播放 | 在线播放av网址 | 中文在线字幕观看电影 | 国产精品手机视频 | 日b黄色片 | 国产精品手机视频 | 五月在线视频 | 亚洲视频一区二区三区在线观看 | 精品亚洲免费 | 亚洲乱码精品 | 狠狠干成人综合网 | 天天操天天射天天操 | 免费高清在线视频一区· | 激情五月五月婷婷 | 1024手机基地在线观看 | 91麻豆精品久久久久久 | av在线电影播放 | 天天色天天射天天操 | 色婷婷国产在线 | 色综合久久中文综合久久牛 | 日韩欧美在线观看一区二区 | 久久久久久久久久久精 | 午夜久久成人 | 开心色停停 | 欧美一级电影片 | 久久久久久久久久久久久9999 | 亚洲国产大片 | a级一a一级在线观看 | 日韩福利在线观看 | 欧美激情视频久久 | 97在线视频免费播放 | 成年人电影毛片 | 久久视了 | 91热| 亚洲国产wwwccc36天堂 | 日产乱码一二三区别免费 | 日日碰狠狠添天天爽超碰97久久 | 国产超碰在线 | 亚洲成人精品久久久 | 中文字幕一二 | 国产成人精品亚洲 | 欧美日韩18 | free. 性欧美.com| 精品福利片 | 久久精品中文字幕 | 国产精品乱码一区二区视频 | 有码中文字幕在线观看 | 丁香激情视频 | 911精品视频 | 午夜久久久久久久 | 天天色棕合合合合合合 | 99久久精品免费看 | 一区二区三区免费在线播放 | 久久国产精品偷 | 日韩羞羞| 成人av免费 | 免费黄色在线网站 | 麻豆国产露脸在线观看 | 欧美精品久久久久久久亚洲调教 | 国产中文字幕国产 | 国产精品 久久 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 国产色在线 | 成人免费共享视频 | 美女福利视频 | 免费看精品久久片 | 人人干97 | 成 人 黄 色 视频免费播放 | 99精品一级欧美片免费播放 | 免费视频一二三区 | 久久国产99| 亚洲国产mv| 黄色毛片电影 | 久久精品视频网 | 伊人色综合久久天天网 | 天天操夜夜叫 | 五月开心六月婷婷 | 91中文字幕 | 久久婷婷久久 | 久久在现| www久久久久 | 久久精精品视频 | 中文字幕人成一区 | 久久久精品网站 | 国产精品久久久久久久久久直播 | 欧美一级性生活片 | 久久久免费精品 | 91手机电视 | 免费中文字幕在线观看 | 天天艹天天干天天 | 中国一级片在线播放 | 国产成人在线观看 | www.久草视频 | 日韩在线视频网址 | 色网站视频 | 亚洲激情在线视频 | 天天干,狠狠干 | 久久老司机精品视频 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲视频在线观看免费 | 五月婷婷播播 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 免费观看一区二区三区视频 | 日韩免费中文 | 国产97色 | 91视频 - 88av | 色综合网在线 | 欧美狠狠操 | 免费69视频 | 探花视频在线观看+在线播放 | 亚洲一级片免费观看 | 91免费视频网站在线观看 | 综合久久久 | 欧美色图p | 亚洲精品在线国产 | 久久久伊人网 | 97高清视频 | 国产中文字幕亚洲 | 久久综合网色—综合色88 | 久久一区二区三区超碰国产精品 | 国产91小视频 | 黄网在线免费观看 | 日韩欧美精品在线视频 | 超碰在线cao | 欧美激情视频一二区 | 国产理论影院 | 97在线视频免费观看 | 五月天综合色激情 | 狠狠狠的干 | 欧美日韩观看 | 日韩日韩日韩日韩 | 国产精品 国内视频 | 国产一区成人 | 日本三级人妇 | 91精品婷婷国产综合久久蝌蚪 | av免费看av| 中文字幕高清在线 | 在线观看国产高清视频 | av在线网站免费观看 | 中午字幕在线观看 | 黄色片网站 | 久久99国产精品久久 | 亚洲成人精品在线 | 青青河边草观看完整版高清 | 欧美激情视频在线免费观看 | 国产剧情一区二区 | 精品国产三级 | 激情小说久久 | 久久精品99国产国产 | av网站在线免费观看 | 精品字幕| 在线观看免费日韩 | 色www精品视频在线观看 | 国产天天综合 | 粉嫩一区二区三区粉嫩91 | 91精品国| 欧美成人久久 | 97免费在线视频 | 啪啪肉肉污av国网站 | 国产精品av在线免费观看 | 亚洲 欧美变态 另类 综合 | 国产精品久久一区二区无卡 | 在线看片中文字幕 | 久久久免费精品 | 久久久久国产一区二区三区 | 91九色国产在线 | 日本精品久久久一区二区三区 | 麻豆视频在线看 | 亚洲一级电影在线观看 | 麻豆视频一区 | 麻豆你懂的 | 免费观看性生活大片3 | 九九精品久久 | 成人国产精品电影 | www.com.黄| 99爱精品视频 | 99国内精品 | 久久久久成人精品免费播放动漫 | 成人小视频在线免费观看 | 欧美色图亚洲图片 | 日韩精品视频在线观看网址 | 日日夜夜天天久久 | 精品中文字幕在线观看 | 337p日本欧洲亚洲大胆裸体艺术 | 国产精品1000 | 久久久蜜桃一区二区 | 久久综合婷婷综合 | 91自拍91| 国产精品福利在线播放 | 91网址在线观看 | 精品亚洲国产视频 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 在线 视频 亚洲 | 人人爽人人香蕉 | 97超碰香蕉 | 91黄色在线视频 | 亚洲国产成人高清精品 | 国产在线播放观看 | 久久成人久久 | 在线免费黄色av | 婷婷资源站 | 人人看人人做人人澡 | 999久久久免费精品国产 | 精品久久久久一区二区国产 | 国产男女爽爽爽免费视频 | 国产精品九色 | 91网在线观看 | 亚洲精品免费在线观看视频 | 99久久精品午夜一区二区小说 | www夜夜操com| www夜夜操| 久久99精品一区二区三区三区 | 亚洲精品www | 九九免费精品视频在线观看 | 国偷自产视频一区二区久 | 久久久久久久久久久影院 | 五月婷婷六月综合 | 玖玖玖在线 | 国产在线播放不卡 | 97色狠狠 | 成人禁用看黄a在线 | 97超碰精品| 一区二区成人国产精品 | 亚洲国产免费看 | 91久久人澡人人添人人爽欧美 | 黄在线免费看 | 人人干人人干人人干 | 香蕉在线播放 | 精品国产一区二区三区久久久 | 天天射天天射天天 | 综合久久久久久 | 91国内在线 | 国产色妞影院wwwxxx | 午夜视频在线观看一区二区三区 | 中文字幕精 | 五月婷婷在线综合 | 99精品久久久久久久久久综合 | 欧美精品生活片 | 999在线视频 | 欧美色图亚洲图片 | 国产视频在线观看一区二区 | 午夜精品久久久99热福利 | 97超碰在线人人 | 精品国内自产拍在线观看视频 | 亚洲成人动漫在线观看 | 色视频网站在线 | 精品产品国产在线不卡 | 久久精品9 | 日韩免费三区 | 天堂av官网| 久草a在线| 婷婷色影院 | 99精品国产成人一区二区 | 成人在线播放网站 | 九草在线视频 | 91激情视频在线播放 | 日韩av图片 | 毛片美女网站 | 夜添久久精品亚洲国产精品 | 成人在线视频免费观看 | 亚洲欧美日韩国产 | 四虎在线视频免费观看 | 人人澡澡人人 | 日韩欧美综合视频 | 在线看成人av | 999视频网| 中文字幕色网站 | 在线观看黄色免费视频 | 欧美一区二区三区在线视频观看 | 国产亚洲精品久久久久久网站 | 久久久久免费 | 精品一区二区在线观看 | 国产一区精品在线 | 男女激情片在线观看 | 成人18视频| 成人免费观看网址 | 国产日本在线播放 | 亚洲精品国偷自产在线91正片 | 91看片在线看片 | 久久久国产精品免费 | 国产在线黄 | www..com黄色片| 在线播放亚洲激情 | 97色婷婷成人综合在线观看 | 国产精品视频内 | 黄色在线免费观看网站 | 伊人天天 | 69精品久久 | 欧美在线视频一区二区三区 | 亚洲高清不卡av | 九九色视频 | 韩国视频一区二区三区 | 亚洲人成人99网站 | 日本久久高清视频 | 国产自产在线视频 | 成年人国产在线观看 | 波多野结衣网址 | 九9热这里真品2 | 99久久久久国产精品免费 | 有码中文在线 | 999久久久久久久久久久 | 国产色资源 | 国产特黄色片 | 国产成人精品亚洲a | 奇米影视8888在线观看大全免费 | 91在线91 | 久久这里只有精品首页 | 伊人久操| 夜夜躁日日躁狠狠久久av | 2019中文字幕第一页 | 国产精品乱码久久久久久1区2区 | 久久超碰免费 | 久久永久视频 | 亚洲日韩中文字幕在线播放 | 日韩欧美在线不卡 | 成人小视频在线播放 | 国产91影院| 午夜精品久久久久久久久久 | 不卡日韩av | 国产精品video爽爽爽爽 | 最近中文字幕在线中文高清版 | av中文字幕日韩 | 免费在线黄色av | 人人艹人人 | www.香蕉视频在线观看 | 天天天天综合 | 在线www色 | 国产成人精品一区二区三区 | 一区二区三区在线视频观看58 | 亚洲精品福利视频 | 99热 精品在线 | 欧美日韩亚洲在线观看 | 日本韩国欧美在线观看 | 国产精品1区2区3区在线观看 | 狠狠操夜夜 | 黄色小说视频网站 | 婷婷色吧 | 日韩视频免费在线观看 | 国产色 在线| 狠狠五月天 | 日韩中文字幕视频在线 | 日日夜夜天天 | 欧美色精品天天在线观看视频 | 亚洲视频www| 久久亚洲婷婷 | 欧美日本一区 | 91亚洲精品久久久久图片蜜桃 | 欧美性黑人 | 日韩精品观看 | 久久久久久久久久电影 | 最近日本韩国中文字幕 | 国产精品一区二区三区久久 | 国产午夜一级毛片 | 麻豆免费在线播放 | 六月婷婷网 | 久草在线免费资源 | 午夜视频在线观看一区二区三区 | 国产黄色电影 | 欧美精品久久久久久久久久丰满 | 亚洲精品在线免费看 | 麻豆视频免费网站 | 成人免费91 | 欧美伦理一区二区 | 久久高清免费观看 | 久久久精品国产一区二区电影四季 | 国产伦理久久 | 亚洲国产成人精品久久 | 国产视频九色蝌蚪 | 日韩视频二区 | 日韩特黄av| 国产高清av免费在线观看 | 久久国产色 | 国产精品毛片 | 丁香六月欧美 | 九九爱免费视频 | 欧美激情精品久久久久久免费 | 密桃av在线| 亚洲在线高清 | www.伊人网| 狠狠干美女 | 婷婷六月天丁香 | 欧美在线一 | 欧美日韩综合在线 | 久久综合久久88 | 一区二区三区免费在线观看视频 | 成年人av在线播放 | 欧美一级免费黄色片 | 五月婷在线 | 国产一级久久 | 欧美日韩二三区 | 久久99这里只有精品 | 在线免费高清一区二区三区 | 激情网五月天 | 久久久久日本精品一区二区三区 | 97在线观看视频国产 | 亚洲桃花综合 | 亚洲精品自在在线观看 | 欧美一区二视频在线免费观看 | 成 人 黄 色 片 在线播放 | 亚洲国产精品激情在线观看 | 亚洲天天在线 | 伊人亚洲精品 | 国产精品原创 | 激情av网址 | 色噜噜日韩精品欧美一区二区 | 主播av在线 | 久久综合国产伦精品免费 | 日本在线观看一区二区三区 | 2021国产在线视频 | 91大神一区二区三区 | 99精品欧美一区二区三区 | 五月天久久久久久 | 国产最顶级的黄色片在线免费观看 | 色播六月天 | 中文字幕第一页在线 | 色天天天 | 亚洲黄色高清 | 伊人色**天天综合婷婷 | 久艹视频在线免费观看 | 中文字幕一区二区三区四区 | av在线短片 | 久久精品成人 | 成人h视频在线 | 色综合久久五月天 | 天天草天天草 | 亚洲国产精品资源 | 国产又粗又猛又爽 | 久久久久久久久久久网 | 国产一二三四在线观看视频 | 91视频3p| 99精品久久久久久久久久综合 | 久久国产一二区 | 香蕉影视 | www.五月婷婷.com | 在线观看成人福利 | 久草97| av成人在线看 | 国产不卡高清 | 国产精品2019 | 国产在线观看免费 | 国产视频在线免费观看 | 91亚洲精品久久久 | 日韩高清黄色 | 欧美激情视频三区 | 在线成人高清电影 | 夜夜爱av| 久久精品中文字幕 | 欧美一级日韩三级 | 97超碰在| 久久噜噜少妇网站 | 国产一在线精品一区在线观看 | 亚洲精品在线看 | 亚洲国产欧美在线看片xxoo | 亚洲另类视频在线观看 | 国产精品福利无圣光在线一区 | 日韩系列在线观看 | 亚洲综合在线播放 | 麻豆国产网站 | 深爱开心激情网 | 国产夫妻自拍av | 国产精品福利在线 | 九九热精品在线 | 免费看一级特黄a大片 | 日韩中文在线播放 | 欧美精品少妇xxxxx喷水 | 中文字幕日韩av | 国产精品v a免费视频 | 奇米网在线观看 | 97超碰.com | 亚色视频在线观看 | 国产性xxxx | 久久五月婷婷丁香社区 | 免费97视频| 黄视频网站大全 | 日韩三级在线观看 | 国产精品video爽爽爽爽 | 国产日韩欧美在线观看视频 | 国产在线超碰 | 免费观看国产精品视频 | 最近2019年日本中文免费字幕 | 婷婷 综合 色 | 热久精品 | 亚洲精品久久在线 | 在线观看岛国片 | 在线网站黄 | 久久精品成人热国产成 | 97免费在线观看视频 | 中文国产在线观看 | 日韩美视频| 免费观看视频黄 | 狠狠干天天 | 日韩在线网址 | 国产你懂的在线 | 国产精品a久久久久 | www.久久久精品 | 久久官网 | 黄色网免费 | 亚洲成人动漫在线观看 | 日韩在观看线 | 色综合婷婷久久 | 在线日韩一区 | 在线不卡的av | 超碰精品在线 | 天天综合色 | 麻豆mv在线观看 | 精品亚洲欧美一区 | 久久99在线视频 | 天天综合人人 | www黄色| 久热精品国产 | 欧美日韩国产综合网 | 九九视频在线观看视频6 | 久久线视频 | 日韩在线一区二区免费 | 91免费观看视频网站 | 亚洲精品久久久蜜臀下载官网 | 四虎成人免费观看 | 久久久久久麻豆 | 国产视频首页 | 精品国产乱码久久久久久1区二区 | 亚洲精色 | 国产 在线 日韩 | 久久精品免费 | 伊人丁香 | 九九热re| 在线观看亚洲 | 中文字幕亚洲在线观看 | 中文字幕av免费观看 | 国产日本三级 | 人人爱人人射 | 一区二区三区在线免费观看视频 | 亚洲精品视频在线观看视频 | 国产精品综合久久久久 | 一级黄色在线免费观看 | 亚洲国产精彩中文乱码av | 午夜三级在线 | 91精品国自产在线观看欧美 | 在线色亚洲 | 国产爽视频 | 又黄又爽又无遮挡的视频 | 免费在线观看毛片网站 | 日本久草电影 | 特级毛片在线 | 在线免费亚洲 | 人人插人人搞 | 2021久久| 久草久视频 | 久久久久久久久久久国产精品 | 毛片网站在线 | 亚洲成av人影院 | 黄色免费观看网址 | 毛片在线网| 日韩av一区二区三区四区 | 国内久久久 | 99在线精品视频观看 |