精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#調(diào)用DLL函數(shù)方法(下)

開發(fā) 后端
本文繼續(xù)介紹了C#調(diào)用DLL函數(shù)方法。

本文的內(nèi)容接著C#調(diào)用DLL函數(shù)方法(上)。

因為C#中使用DllImport是不能像動態(tài)load/unload assembly那樣,所以只能借助API函數(shù)了。在kernel32.dll中,與動態(tài)庫調(diào)用有關(guān)的函數(shù)包括[3]:

①LoadLibrary(或MFC 的AfxLoadLibrary),裝載動態(tài)庫。

②GetProcAddress,獲取要引入的函數(shù),將符號名或標(biāo)識號轉(zhuǎn)換為DLL內(nèi)部地址。

③FreeLibrary(或MFC的AfxFreeLibrary),釋放動態(tài)鏈接庫。

它們的原型分別是:

HMODULE LoadLibrary(LPCTSTR lpFileName);

FARPROC GetProcAddress(HMODULE hModule, LPCWSTR lpProcName);

BOOL FreeLibrary(HMODULE hModule);

現(xiàn)在,我們可以用IntPtr hModule=LoadLibrary(“Count.dll”);來獲得Dll的句柄,用IntPtr farProc=GetProcAddress(hModule,”_count@4”);來獲得函數(shù)的入口地址。

但是,知道函數(shù)的入口地址后,怎樣調(diào)用這個函數(shù)呢?因為在C#中是沒有函數(shù)指針的,沒有像C++那樣的函數(shù)指針調(diào)用方式來調(diào)用函數(shù),所以我們得借助其它方法。經(jīng)過研究,發(fā)現(xiàn)我們可以通過結(jié)合使用System.Reflection.Emit及System.Reflection.Assembly里的類和函數(shù)達(dá)到我們的目的。為了以后使用方便及實現(xiàn)代碼的復(fù)用,我們可以編寫一個類。

1) dld類的編寫:

1.打開項目“Test”,打開類視圖,右擊“Tzb”,選擇“添加”-->“類”,類名設(shè)置為“dld”,即dynamic loading dll 的每個單詞的開頭字母。

2.添加所需的命名空間及聲明參數(shù)傳遞方式枚舉:

  1. using System.Runtime.InteropServices; // 用DllImport 需用此命名空間  
  2.  
  3. using System.Reflection; // 使用Assembly 類需用此命名空間  
  4.  
  5. using System.Reflection.Emit; // 使用ILGenerator 需用此命名空間  

3. 在namespace test中,“public class dld”的上面,添加如下代碼聲明參數(shù)傳遞方式枚舉:

   

  1. /// < summary>   
  2.  
  3.     /// 參數(shù)傳遞方式枚舉,ByValue 表示值傳遞,ByRef 表示址傳遞  
  4.  
  5.     /// < /summary>   
  6.  
  7.     public enum ModePass  
  8.  
  9.     {  
  10.  
  11.         ByValue = 0x0001,  
  12.  
  13.         ByRef = 0x0002  
  14.  
  15. }  
  16.  

4、在public class DLD中,添加如下代碼:

   

  1. public class DLD  
  2.  
  3.     {  
  4.  
  5.         [DllImport("kernel32.dll")]  
  6.  
  7.         public static extern IntPtr LoadLibrary(string lpFileName);  
  8.  
  9.    
  10.  
  11.         [DllImport("kernel32.dll")]  
  12.  
  13.         public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProceName);  
  14.  
  15.    
  16.  
  17.         [DllImport("kernel32", EntryPoint = "FreeLibrary", SetLastError = true)]  
  18.  
  19.         public static extern bool FreeLibrary(IntPtr hModule);  
  20.  
  21.    
  22.  
  23.         /// < summary>   
  24.  
  25.    
  26.  
  27.         /// Loadlibrary 返回的函數(shù)庫模塊的句柄   
  28.  
  29.    
  30.  
  31.         /// < /summary>   
  32.  
  33.    
  34.  
  35.         private IntPtr hModule = IntPtr.Zero;  
  36.  
  37.    
  38.  
  39.         /// < summary>   
  40.  
  41.    
  42.  
  43.         /// GetProcAddress 返回的函數(shù)指針   
  44.  
  45.    
  46.  
  47.         /// < /summary>   
  48.  
  49.    
  50.  
  51.         private IntPtr farProc = IntPtr.Zero;  
  52.  
  53.    
  54.  
  55.         /// < summary>   
  56.  
  57.    
  58.  
  59.         /// 裝載 Dll   
  60.  
  61.    
  62.  
  63.         /// < /summary>   
  64.  
  65.    
  66.  
  67.         /// < param name="lpFileName">DLL 文件名 < /param>   
  68.  
  69.    
  70.  
  71.         public void LoadDll(string lpFileName)  
  72.  
  73.         {  
  74.  
  75.    
  76.  
  77.             hModule = LoadLibrary(lpFileName);  
  78.  
  79.    
  80.  
  81.             if (hModule == IntPtr.Zero)  
  82.  
  83.    
  84.  
  85.                 throw (new Exception(" 沒有找到 :" + lpFileName + "."));  
  86.  
  87.         }  
  88.  
  89.    
  90.  
  91.    
  92.  
  93.         /// < summary>   
  94.  
  95.    
  96.  
  97.         /// 獲得函數(shù)指針   
  98.  
  99.    
  100.  
  101.         /// < /summary>   
  102.  
  103.    
  104.  
  105.         /// < param name="lpProcName"> 調(diào)用函數(shù)的名稱 < /param>   
  106.  
  107.    
  108.  
  109.         public void LoadFun(string lpProcName)  
  110.  
  111.         { // 若函數(shù)庫模塊的句柄為空,則拋出異常   
  112.  
  113.    
  114.  
  115.             if (hModule == IntPtr.Zero)  
  116.  
  117.    
  118.  
  119.                 throw (new Exception(" 函數(shù)庫模塊的句柄為空 , 請確保已進(jìn)行 LoadDll 操作 !"));  
  120.  
  121.    
  122.  
  123.             // 取得函數(shù)指針   
  124.  
  125.    
  126.  
  127.             farProc = GetProcAddress(hModule, lpProcName);  
  128.  
  129.    
  130.  
  131.             // 若函數(shù)指針,則拋出異常   
  132.  
  133.    
  134.  
  135.             if (farProc == IntPtr.Zero)  
  136.  
  137.    
  138.  
  139.                 throw (new Exception(" 沒有找到 :" + lpProcName + " 這個函數(shù)的入口點 "));  
  140.  
  141.    
  142.  
  143.         }  
  144.  
  145.    
  146.  
  147.         /// < summary>   
  148.  
  149.    
  150.  
  151.         /// 卸載 Dll   
  152.  
  153.    
  154.  
  155.         /// < /summary>   
  156.  
  157.    
  158.  
  159.         public void UnLoadDll()  
  160.  
  161.         {  
  162.  
  163.    
  164.  
  165.             FreeLibrary(hModule);  
  166.  
  167.    
  168.  
  169.             hModule = IntPtr.Zero;  
  170.  
  171.    
  172.  
  173.             farProc = IntPtr.Zero;  
  174.  
  175.    
  176.  
  177.         }  
  178.  
  179.    
  180.  
  181.    
  182.  
  183.         /// < summary>   
  184.  
  185.    
  186.  
  187.         /// 調(diào)用所設(shè)定的函數(shù)   
  188.  
  189.    
  190.  
  191.         /// < /summary>   
  192.  
  193.    
  194.  
  195.         /// < param name="ObjArray_Parameter"> 實參 < /param>   
  196.  
  197.    
  198.  
  199.         /// < param name="TypeArray_ParameterType"> 實參類型 < /param>   
  200.  
  201.    
  202.  
  203.         /// < param name="ModePassArray_Parameter"> 實參傳送方式 < /param>   
  204.  
  205.    
  206.  
  207.         /// < param name="Type_Return"> 返回類型 < /param>   
  208.  
  209.    
  210.  
  211.         /// < returns> 返回所調(diào)用函數(shù)的 object< /returns>   
  212.  
  213.    
  214.  
  215.         public object Invoke(object[] ObjArray_Parameter, Type[] TypeArray_ParameterType, ModePass[] ModePassArray_Parameter, Type Type_Return)  
  216.  
  217.         {  
  218.  
  219.    
  220.  
  221.             // 下面 3 個 if 是進(jìn)行安全檢查 , 若不能通過 , 則拋出異常   
  222.  
  223.    
  224.  
  225.             if (hModule == IntPtr.Zero)  
  226.  
  227.    
  228.  
  229.                 throw (new Exception(" 函數(shù)庫模塊的句柄為空 , 請確保已進(jìn)行 LoadDll 操作 !"));  
  230.  
  231.    
  232.  
  233.             if (farProc == IntPtr.Zero)  
  234.  
  235.    
  236.  
  237.                 throw (new Exception(" 函數(shù)指針為空 , 請確保已進(jìn)行 LoadFun 操作 !"));  
  238.  
  239.    
  240.  
  241.             if (ObjArray_Parameter.Length != ModePassArray_Parameter.Length)  
  242.  
  243.    
  244.  
  245.                 throw (new Exception(" 參數(shù)個數(shù)及其傳遞方式的個數(shù)不匹配 ."));  
  246.  
  247.    
  248.  
  249.             // 下面是創(chuàng)建 MyAssemblyName 對象并設(shè)置其 Name 屬性   
  250.  
  251.    
  252.  
  253.             AssemblyName MyAssemblyName = new AssemblyName();  
  254.  
  255.    
  256.  
  257.             MyAssemblyName.Name = "InvokeFun";  
  258.  
  259.    
  260.  
  261.             // 生成單模塊配件   
  262.  
  263.    
  264.  
  265.             AssemblyBuilder MyAssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(MyAssemblyName, AssemblyBuilderAccess.Run);  
  266.  
  267.    
  268.  
  269.             ModuleBuilder MyModuleBuilder = MyAssemblyBuilder.DefineDynamicModule("InvokeDll");  
  270.  
  271.    
  272.  
  273.             // 定義要調(diào)用的方法 , 方法名為“ MyFun ”,返回類型是“ Type_Return ”參數(shù)類型是“ TypeArray_ParameterType ”   
  274.  
  275.    
  276.  
  277.             MethodBuilder MyMethodBuilder = MyModuleBuilder.DefineGlobalMethod("MyFun", MethodAttributes.Public | MethodAttributes.Static, Type_Return, TypeArray_ParameterType);  
  278.  
  279.    
  280.  
  281.             // 獲取一個 ILGenerator ,用于發(fā)送所需的 IL   
  282.  
  283.    
  284.  
  285.             ILGenerator IL = MyMethodBuilder.GetILGenerator();  
  286.  
  287.    
  288.  
  289.             int i;  
  290.  
  291.    
  292.  
  293.             for (i = 0; i <  ObjArray_Parameter.Length; i++)  
  294.  
  295.             {// 用循環(huán)將參數(shù)依次壓入堆棧   
  296.  
  297.    
  298.  
  299.                 switch (ModePassArray_Parameter[i])  
  300.  
  301.                 {  
  302.  
  303.    
  304.  
  305.                     case ModePass.ByValue:  
  306.  
  307.    
  308.  
  309.                         IL.Emit(OpCodes.Ldarg, i);  
  310.  
  311.    
  312.  
  313.                         break;  
  314.  
  315.    
  316.  
  317.                     case ModePass.ByRef:  
  318.  
  319.    
  320.  
  321.                         IL.Emit(OpCodes.Ldarga, i);  
  322.  
  323.    
  324.  
  325.                         break;  
  326.  
  327.    
  328.  
  329.                     default:  
  330.  
  331.    
  332.  
  333.                         throw (new Exception(" 第 " + (i + 1).ToString() + " 個參數(shù)沒有給定正確的傳遞方式 ."));  
  334.  
  335.    
  336.  
  337.                 }  
  338.  
  339.    
  340.  
  341.             }  
  342.  
  343.    
  344.  
  345.             if (IntPtr.Size == 4)  
  346.  
  347.             {// 判斷處理器類型   
  348.  
  349.    
  350.  
  351.                 IL.Emit(OpCodes.Ldc_I4, farProc.ToInt32());  
  352.  
  353.    
  354.  
  355.             }  
  356.  
  357.    
  358.  
  359.             else if (IntPtr.Size == 8)  
  360.  
  361.             {  
  362.  
  363.    
  364.  
  365.                 IL.Emit(OpCodes.Ldc_I8, farProc.ToInt64());  
  366.  
  367.    
  368.  
  369.             }  
  370.  
  371.    
  372.  
  373.             else 
  374.  
  375.             {  
  376.  
  377.    
  378.  
  379.                 throw new PlatformNotSupportedException();  
  380.  
  381.    
  382.  
  383.             }  
  384.  
  385.    
  386.  
  387.             IL.EmitCalli(OpCodes.Calli, CallingConvention.StdCall, Type_Return, TypeArray_ParameterType);  
  388.  
  389.    
  390.  
  391.             IL.Emit(OpCodes.Ret); // 返回值   
  392.  
  393.    
  394.  
  395.             MyModuleBuilder.CreateGlobalFunctions();  
  396.  
  397.    
  398.  
  399.             // 取得方法信息   
  400.  
  401.    
  402.  
  403.             MethodInfo MyMethodInfo = MyModuleBuilder.GetMethod("MyFun");  
  404.  
  405.    
  406.  
  407.             return MyMethodInfo.Invoke(null, ObjArray_Parameter);// 調(diào)用方法,并返回其值   
  408.  
  409.    
  410.  
  411.         }  
  412.  
  413.     }  
  414.  

2) dld類的使用:

1.打開項目“Test”,向“Form1”窗體中添加一個按鈕,和一個TestBox,Name改為txRet。視圖中雙擊按鈕,在“button1_Click”方法體上面添加代碼,創(chuàng)建一個dld類實例,并進(jìn)行測試。具體如下:

  1. private void button1_Click(object sender, EventArgs e)  
  2.  
  3.         {  
  4.  
  5.    
  6.  
  7.             int ret = 0;  
  8.  
  9.             dld myDLD = new dld();  
  10.  
  11.    
  12.  
  13.             myDLD.LoadDll("xxx.dll");  
  14.  
  15.    
  16.  
  17.             myDLD.LoadFun("InitSDK");  
  18.  
  19.    
  20.  
  21.             object[] Parameters = new object[] { }; // 實參為0   
  22.  
  23.    
  24.  
  25.             Type[] ParameterTypes = new Type[] { }; // 實參類型為int   
  26.  
  27.    
  28.  
  29.             ModePass[] themode = new ModePass[] { }; // 傳送方式為值傳  
  30.  
  31.    
  32.  
  33.             Type Type_Return = typeof(int); // 返回類型為int  
  34.  
  35.    
  36.  
  37.             ret = (int)myDLD.Invoke(Parameters, ParameterTypes, themode, Type_Return);  
  38.  
  39.             txRet.Text = ret.ToString();  
  40.  
  41.             if (ret != 1)  
  42.  
  43.             {  
  44.  
  45.                 MessageBox.Show("InitSDK failed !");  
  46.  
  47.             }  
  48.  
  49.             if (ret == 1)  
  50.  
  51.             {  
  52.  
  53.                 MessageBox.Show("InitSDK Sucessed !");  
  54.  
  55.             }  
  56.  
  57.         }  
  58.  

其中,xxx為要測試的dll名稱,InitSDK為dll中的要測試的函數(shù)。

至此,C#調(diào)用DLL函數(shù)方法就介紹完了,希望對大家有所幫助。

【編輯推薦】

  1. C#自定義事件步步 通
  2. 如何在C#中使用存儲過程(SQL Server 2000)
  3. 存儲過程自動轉(zhuǎn)成C#源碼過程
  4. C#事件處理和自定義事件
  5. 通過C#反射特性查看自定義特性
責(zé)任編輯:book05 來源: csdn
相關(guān)推薦

2009-08-05 09:30:39

C#調(diào)用DLL函數(shù)

2009-08-07 17:22:36

C#調(diào)用dll導(dǎo)出函數(shù)

2009-08-03 12:57:27

C#調(diào)用DLL

2009-08-05 09:09:14

C#調(diào)用VC DLL接

2011-04-08 09:52:44

C++C#DLL

2009-07-31 14:54:48

dll函數(shù)C#導(dǎo)出

2009-07-31 17:28:35

C#語言調(diào)用DLL

2009-08-05 17:06:39

ASP調(diào)用C# DLL

2009-08-07 17:12:07

C# DLL函數(shù)

2009-08-05 16:41:36

C#調(diào)用VC dll

2009-09-02 17:16:01

冒泡排序

2009-08-05 15:04:14

C# dll注入

2009-08-05 09:22:43

C#調(diào)用VC DLL

2009-08-05 16:49:42

C#中調(diào)用dll

2009-08-31 18:05:14

C#調(diào)用WalkTre

2009-08-31 16:33:28

C#調(diào)用Dispose

2009-07-31 16:12:10

Windows APIC#

2009-08-25 10:59:00

C#調(diào)用函數(shù)顯示值

2009-08-03 13:34:57

C#調(diào)用Windows

2009-08-14 09:15:28

C#調(diào)用構(gòu)造函數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

瑟瑟视频在线观看| 欧洲精品一区二区三区久久| 国产一区二区三区三州| 欧美日韩国产高清| 日韩av综合网| 岛国毛片在线播放| 丁香花在线观看完整版电影| 91麻豆免费观看| 国产乱人伦真实精品视频| 久久国产露脸精品国产| 国产精品欧美三级在线观看| 欧美高清视频在线高清观看mv色露露十八| 日韩精品一区二区三区四| 欧美女优在线观看| 国产剧情一区在线| 国产精品久久久久一区二区| 久久人人爽人人爽人人| 日韩精品久久| 精品无人区乱码1区2区3区在线| 一区二区在线免费看| 91美女主播在线视频| 国产精品伦理在线| 久久精品午夜一区二区福利| 国产成人a人亚洲精品无码| 久久久久久久欧美精品| 久久久女女女女999久久| 五月天婷婷丁香网| 日韩在线你懂的| 欧美一区二区三区视频免费播放 | 亚洲妇女屁股眼交7| 日韩电影大全在线观看| 五月天婷婷社区| 国产精品亚洲第一区在线暖暖韩国| 日本高清不卡的在线| 四虎成人精品永久免费av| 亚洲女同一区| 日韩亚洲精品电影| 国产馆在线观看| 少妇精品久久久一区二区| 精品国产三级a在线观看| 国内av一区二区| 成人涩涩视频| 91久久精品一区二区三区| 欧美一区二区中文字幕| 欧美人与性动交α欧美精品图片| 1000精品久久久久久久久| 亚洲福利av在线| 国产区av在线| 欧美激情自拍偷拍| 农村寡妇一区二区三区| 亚洲欧洲视频在线观看| a级精品国产片在线观看| 国产女主播一区二区| 人妻无码中文字幕| 成人av资源在线观看| 国产九区一区在线| 蜜臀av午夜精品| www.av亚洲| 久久精品午夜一区二区福利| 日本少妇一区二区三区| 国产精品的网站| 国产精品久久精品| 亚洲欧美另类在线视频| 久久激情一区| 国产精品pans私拍| 成人毛片一区二区三区| 日韩精品一二区| 国产精品久久久久免费a∨| 久久这里只有精品9| 秋霞成人午夜伦在线观看| 国产精品亚洲аv天堂网| 在线免费观看视频网站| 久久国产精品99久久人人澡| 亚洲xxx视频| 天堂av中文字幕| 久久久久国产精品人| 亚洲精品一区二| sm国产在线调教视频| 亚洲一区二区三区四区在线| 国产在线精品91| 免费成人美女女| 欧美电影一区二区三区| 最新日本中文字幕| 一本久久青青| 视频直播国产精品| 久久久一区二区三区四区| 午夜亚洲福利在线老司机| 国产精品成人观看视频国产奇米| 国产欧美第一页| 成人av在线观| 色综合久久88色综合天天提莫| 毛片在线视频| 偷拍与自拍一区| 嫩草影院国产精品| 日韩欧美久久| 亚洲欧美日韩中文在线制服| 国产成人av免费在线观看| 亚洲激情偷拍| 91精品久久久久久久久久入口| www.四虎在线观看| 国产校园另类小说区| 真人做人试看60分钟免费| 亚洲女同av| 欧美一区二区三区四区五区| 人人妻人人澡人人爽人人精品| 午夜国产一区二区| 91精品91久久久久久| 一起草av在线| 久久久久久久久97黄色工厂| 久久亚洲a v| 电影久久久久久| 亚洲第一福利视频| 三上悠亚作品在线观看| 亚洲综合日本| 999精品视频一区二区三区| 国产有码在线| 婷婷开心久久网| 日韩精品xxx| 欧美韩国日本在线观看| 热99在线视频| 污污视频在线观看网站| 亚洲精品视频在线观看免费| 青青在线免费观看视频| 国产一区在线电影| 九色精品免费永久在线| 91中文字幕在线播放| 久久色在线观看| 欧美一级视频免费看| 欧洲精品99毛片免费高清观看| 国产亚洲精品美女久久久| 欧美福利视频一区二区| 国产成人在线电影| 中文字幕一区二区三区有限公司| 成人看片网页| 亚洲性日韩精品一区二区| jizz国产免费| 粉嫩aⅴ一区二区三区四区| 中文字幕色一区二区| 国产91在线播放精品| 伊人av综合网| 国产精品无码一区| 中文字幕免费不卡| 亚洲狼人综合干| 欧美三级美国一级| 国产成人精品国内自产拍免费看| 天堂av在线免费观看| 同产精品九九九| 少妇一级淫片免费放播放| 在线成人欧美| 精品国产免费一区二区三区| 99色在线观看| 亚洲精品福利资源站| 亚洲欧美在线视频免费| 99精品黄色片免费大全| 久久成人免费观看| 久久99蜜桃| 国产精品久久久999| av在线三区| 欧美日韩精品高清| 五月综合色婷婷| 国产老妇另类xxxxx| 18黄暴禁片在线观看| 欧美xxxx在线| 日本欧美黄网站| 1区2区3区在线观看| 4438x成人网最大色成网站| 搜索黄色一级片| 成人国产视频在线观看| 男人操女人逼免费视频| 久久av影视| 成人激情视频在线| 成年网站在线视频网站| 亚洲欧美变态国产另类| 中文字幕欧美色图| 亚洲精选视频免费看| 国产精品福利导航| 久久亚洲欧洲| 91成人在线视频观看| 精品日产乱码久久久久久仙踪林| 人人爽久久涩噜噜噜网站| av资源网站在线观看| 欧美一区二区三区成人| 日韩免费黄色片| 国产女人水真多18毛片18精品视频 | 国产人妻精品久久久久野外| 精品福利电影| 青青草原亚洲| 电影一区中文字幕| 97色在线观看| 日本激情视频在线观看| 精品国产自在久精品国产| 在线精品免费视| 亚洲精品乱码久久久久久日本蜜臀| youjizz.com国产| 老牛影视一区二区三区| 日韩专区第三页| 国产一区二区区别| 99porn视频在线| 丝袜美腿一区| 色在人av网站天堂精品| 久草福利在线视频| 精品福利一区二区三区免费视频| 亚洲午夜无码久久久久| 亚洲在线一区二区三区| 国产无遮挡在线观看| 97精品久久久午夜一区二区三区| 超碰在线公开97| 国产精品日韩久久久| 精品日韩在线播放| 国产精品一区二区av交换| 成人av免费看| 国产精品成人3p一区二区三区| 欧美在线亚洲在线| 久久99亚洲网美利坚合众国| 最近中文字幕日韩精品| 日本不卡免费播放| 亚洲大胆人体av| 99精品免费观看| 欧美视频日韩视频| 国产日产精品一区二区三区| 亚洲综合精品自拍| √天堂中文官网8在线| 中日韩av电影| 亚洲av无码一区二区三区人 | 99久久综合国产精品| 久久久精品在线视频| 激情亚洲成人| 蜜桃视频成人在线观看| 日韩欧美视频| 视频一区三区| 国产91一区| 久久久久se| 蜜桃一区av| 国产高清精品一区| 高清一区二区三区av| 国产日韩精品入口| 亚洲精品.com| 欧洲美女免费图片一区| 日韩欧美精品一区二区三区| 性欧美xxxx交| 国产亚洲成av人片在线观看 | 亚洲国产欧美一区二区三区同亚洲 | segui88久久综合| 久久久久久国产精品久久| 欧美黑人xx片| 欧美国产精品日韩| 欧美1234区| 欧美激情aaaa| segui88久久综合| 91av视频在线| 亚洲人体影院| 国产精品久久激情| 天堂久久一区| 99理论电影网| 成人av动漫| 久久精品丝袜高跟鞋| 九九在线高清精品视频| 手机成人在线| 性欧美69xoxoxoxo| 少妇大叫太大太粗太爽了a片小说| 欧美国产三区| 五十路熟女丰满大屁股 | 亚洲欧美日韩一级| 精彩视频一区二区| 亚洲精品在线网址| 成人高清视频在线| 日韩精品无码一区二区三区久久久 | 欧美精品亚洲一区二区在线播放| 91高潮大合集爽到抽搐| 欧美一卡在线观看| 天天综合天天色| 国产性猛交xxxx免费看久久| 里番在线观看网站| 久久99热精品| 成人影院av| 国产欧美亚洲视频| 亚洲精品福利| 欧美精品久久久| 99tv成人| 国产视频一视频二| 日韩成人一区二区| 色哟哟在线观看视频| 久久综合久久99| 日本猛少妇色xxxxx免费网站| 亚洲精品国久久99热| 国偷自拍第113页| 欧美久久久久久久久| 日本xxxx人| 在线观看日韩av| av资源新版天堂在线| 国产精品视频公开费视频| 成人精品动漫一区二区三区| 日韩欧美亚洲区| 国产精品sm| 九九视频精品在线观看| 丁香婷婷深情五月亚洲| 妖精视频在线观看免费| 亚洲国产毛片aaaaa无费看| 免费看污视频的网站| 精品欧美一区二区久久| 91大神在线网站| 97色在线视频| 免费看日产一区二区三区| 欧美在线3区| 精品成人在线| 国产精品嫩草影院8vv8| 91麻豆123| 欧美日韩偷拍视频| 欧美在线小视频| 四虎精品在线| 久久久久久久久久久网站| 欧美大片网站| 欧美成人蜜桃| 亚洲午夜极品| 亚洲午夜激情影院| 国产丝袜欧美中文另类| 国产精品成人aaaa在线| 91精品在线一区二区| av在线第一页| 欧美资源在线观看| 欧美一级二级三级视频| 中文字幕人妻熟女人妻洋洋| 韩日av一区二区| 亚洲一级黄色录像| 在线日韩国产精品| 丝袜视频国产在线播放| 久久久久久久久中文字幕| 国产亚洲字幕| 亚洲精品影院| 日本欧洲一区二区| 成人国产精品久久久网站| 精品久久久久久电影| 狠狠人妻久久久久久综合麻豆| 久久香蕉国产线看观看av| 欧美日韩卡一| 一区二区精品在线| 久久国产福利国产秒拍| 久久日免费视频| 欧美日韩精品欧美日韩精品| 永久免费av在线| 国产精品午夜视频| 国产电影一区二区在线观看| 亚洲激情在线看| 国产精品久久久久影院亚瑟| 亚洲一级片免费看| 日韩在线视频导航| 亚洲ww精品| 日韩 欧美 自拍| 国产成人在线免费| 亚洲一区二区91| 日韩av在线网站| 欧美男女交配| 亚洲一区三区| 久久国产精品99精品国产| 黑鬼狂亚洲人videos| 精品乱人伦小说| 国产粉嫩在线观看| 欧美综合激情| 强制捆绑调教一区二区| 欧美人与禽zoz0善交| 在线综合+亚洲+欧美中文字幕| a在线免费观看| 国产欧美在线一区二区| 亚洲一区二区三区免费在线观看| 久久久久亚洲av无码专区桃色| 欧洲亚洲国产日韩| 日p在线观看| 成人综合电影| 美女视频一区免费观看| youjizz亚洲女人| 日韩三级.com| 国产h片在线观看| 日韩精品久久久| 国产一区不卡精品| 日本在线视频中文字幕| 精品丝袜一区二区三区| 日本午夜精品久久久久| 人妻激情另类乱人伦人妻| 久久嫩草精品久久久精品一| 亚洲无码精品国产| 欧美精品www| 欧美色网址大全| 美国黄色一级视频| 一本大道综合伊人精品热热 | 国内成人精品视频| 国产欧美日韩精品一区二区免费| 一起操在线视频| 亚洲不卡在线观看| av黄色在线观看| 国产精品一区二区三区精品| 日日摸夜夜添夜夜添精品视频 | 色综合天天综合给合国产| 男人天堂久久久| 国产一区二区自拍| 麻豆精品一区二区综合av| 国产大片中文字幕| 最近中文字幕mv在线一区二区三区四区| 超碰精品在线观看| 福利视频999| 欧美性感一区二区三区|