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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何使用动态链接库中的资源

發(fā)布時(shí)間:2024/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用动态链接库中的资源 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

近來(lái)在論壇上很有多帖子問(wèn)到如何使用DLL中的資源(包括對(duì)話框,圖標(biāo)等)的問(wèn)題,現(xiàn)在筆者就來(lái)就此問(wèn)題談?wù)?#xff0c;包含在DLL內(nèi)部使用資源,DLL中使用其它DLL中的資源和在應(yīng)用程序中使用資源。

?????? 我們先以圖標(biāo)為例說(shuō)起(其它的資源與此圖標(biāo)的加載原理大致相同),我們要加載圖標(biāo),一般是調(diào)用AfxGetApp()->LoadIcon(…);下面是CWinApp::LoadIcon的實(shí)現(xiàn)(afxwin2.inl):

_AFXWIN_INLINE HICON CWinApp::LoadIcon(LPCTSTR lpszResourceName) const

{ return ::LoadIcon(AfxFindResourceHandle(lpszResourceName,

???????? RT_GROUP_ICON), lpszResourceName); }

_AFXWIN_INLINE HICON CWinApp::LoadIcon(UINT nIDResource) const

{ return ::LoadIcon(AfxFindResourceHandle(MAKEINTRESOURCE(nIDResource),

???????? RT_GROUP_ICON), MAKEINTRESOURCE(nIDResource)); }

?????? 可以看到CWinApp::LoadIcon實(shí)際上調(diào)用了API .LoadIcon,下面是API LoadIcon的原型:

HICON?LoadIcon(??????HINSTANCE?hInstance,????LPCTSTR?lpIconName);

?

hInstance

[in]?Handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.

hInstance是我們要加載ICON的模塊實(shí)例,這個(gè)實(shí)例從何來(lái),當(dāng)然我們可以直接傳入DLL的實(shí)例,對(duì)于通過(guò)LoadLibrary動(dòng)態(tài)加載的DLL我們可以很容易的得到其句柄,但對(duì)于我們直接鏈接的DLL得到其句柄則要費(fèi)一番周折。可以看到CWinApp::LoadIcon是通過(guò)AfxFindResouceHandle找到此句柄的。下面是AfxFindResourceHandle的定義(afxwin.h):

#ifndef _AFXDLL

#define AfxFindResourceHandle(lpszResource, lpszType) AfxGetResourceHandle()

#else

HINSTANCE AFXAPI AfxFindResourceHandle(LPCTSTR lpszName, LPCTSTR lpszType);

#endif

?????? 我們先討論在靜態(tài)鏈接庫(kù)中使用MFC DLL的情況。可以看到,我們?nèi)绻陟o態(tài)庫(kù)中使用MFC DLL的話(#ifndef _AFXDLL),實(shí)際上就是調(diào)用的AfxGetResourceHandle,MSDN中的說(shuō)明是

AfxGetResourceHandle??

This function accesses the application’s resources directly by using the?HINSTANCE?handle returned, for example, in calls to the Windows function?FindResource.

HINSTANCE AfxGetResourceHandle( );

Return Value

An?HINSTANCE?handle where the default resources of the application are loaded.

函數(shù)返回的應(yīng)用程序加載的缺省資源的HINSTANCE句柄,HINSTANCE相當(dāng)于HMODULE,也就是資源所在的模塊句柄。顯然在此,我們使用的是DLL中的資源,那么我們就應(yīng)該返回此DLL中的HINSTANCE了,如果讓AfxGetResourceHandle返回DLL的HINSTANCE呢?答案是通過(guò)AfxSetResourceHandle設(shè)置。MSDN中AfxSetResouceHandle的說(shuō)明如下:

AfxSetResourceHandle

This function sets the?HINSTANCE?handle that determines where the default resources of the application are loaded.

void AfxSetResourceHandle(

HINSTANCE?hInstResource?);

Parameters

hInstResource

Specifies the instance or module handle to an .EXE or DLL file from which the application’s resources are loaded.

我們只需將DLL的HINSTANCE傳入AfxSetResouceHanle就行了。如何得到DLL的HINSTANCE呢,我們可以通過(guò)DLL聲明一個(gè)接口HINSTANCE GetInstance獲得,也可以通過(guò)EnumProcessMoudules找到(詳細(xì)的過(guò)程見(jiàn)MSDN中EnumProcessModules的說(shuō)明和示例)。

我們使用完DLL中的資源要使用EXE中的資源的資源怎么辦呢?我們需要在使用完成后用AfxSetResource重新將資源模塊的句柄設(shè)置為原來(lái)的值,如果來(lái)保證在資源使用完成后完成這一個(gè)工作呢,即使在使用過(guò)程中發(fā)生異常了,為此我們利C++類的構(gòu)造和析構(gòu)機(jī)制創(chuàng)建了這一類:

class CLocalResource?

{

public:

???????? CLocalResource(HINSTANCE hInstance)

{

???????? m_hInstOld=AfxGetInstanceHandle();

???????? AfxSetInstanceHandle(hInstance);

}

???????? virtual ~CLocalResource()

{

???????? AfxSetInstanceHandle(m_hInstOld);

}

protected:

???????? HINSTANCE m_hInstOld;

};

???????? 我們只需在使用DLL的資源之前構(gòu)造一個(gè)CLocalInstance就行了。

void CXXXX::LoadResouceFromDLL(HINSTANCE hInst,UINT nResID,…)

{

???????? CLocalResouce localRes(hInst);

???????? …

}

下面來(lái)討論在動(dòng)態(tài)庫(kù)中使用MFC DLL的情況(也就是定義了_AFXDLL的情況)

來(lái)看看AfxGetInstanceHandle ,AfxGetResourceHandle和AfxSetResouceHandle的實(shí)現(xiàn)(afxwin1.inl中):

_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()

???????? { ASSERT(afxCurrentInstanceHandle != NULL);

???????? return afxCurrentInstanceHandle; }

_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()

{ ASSERT(afxCurrentResourceHandle != NULL);

return afxCurrentResourceHandle; }

_AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)

{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }

實(shí)際上訪問(wèn)的就是afxCurrentInstanceHandle,afxCurrentResourceHandle。

/

// Global functions for access to the one and only CWinApp

#define afxCurrentInstanceHandle??? AfxGetModuleState()->m_hCurrentInstanceHandle

#define afxCurrentResourceHandle?? AfxGetModuleState()->m_hCurrentResourceHandle

….

AFX_MODULE_STATE* AFXAPI AfxGetModuleState()

{

???????? _AFX_THREAD_STATE* pState = _afxThreadState;

???????? AFX_MODULE_STATE* pResult;

???????? if (pState->m_pModuleState != NULL)

???????? {

?????????????????? // thread state's module state serves as override

?????????????????? pResult = pState->m_pModuleState;

???????? }

???????? else

???????? {

?????????????????? // otherwise, use global app state

?????????????????? pResult = _afxBaseModuleState.GetData();

???????? }

???????? ASSERT(pResult != NULL);

???????? return pResult;

}

其中的_AFX_THREAD_STATE在此我們就不討論了,有興趣的讀者可以閱讀(afxstat_.h和afxstate.cpp)。

???????? 那AfxGetModuleState()->m_hCurrentResourceHandle又是在哪初始化的呢?

我們可以在appinit.cpp中的BOOL AFXAPI AfxWinInit(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)看到

// set resource handles

???????? AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

???????? pModuleState->m_hCurrentInstanceHandle = hInstance;

???????? pModuleState->m_hCurrentResourceHandle = hInstance;

?????? 和appinit.cpp中的void CWinApp::SetCurrentHandles()中看到

???????? AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE();

???????? pModuleState->m_hCurrentInstanceHandle = m_hInstance;

???????? pModuleState->m_hCurrentResourceHandle = m_hInstance;

???????? CWinApp::SetCurrentHandles()也是由AfxWinInit調(diào)用的,那AfxWinInit又由誰(shuí)調(diào)用呢?

我們可以在DllMain(dllinit.cpp和dllmodul.cpp,分別對(duì)應(yīng)于MFC擴(kuò)展DLL和MFC規(guī)則DLL)看到

(dllinit.cpp,MFC擴(kuò)展DLL)

static AFX_EXTENSION_MODULE coreDLL;

….

extern "C"

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)

{

???????? if (dwReason == DLL_PROCESS_ATTACH)

???????? {

?????????????????? …….

?????????????????? // initialize this DLL's extension module

?????????????????? VERIFY(AfxInitExtensionModule(coreDLL, hInstance));

#ifdef _AFX_OLE_IMPL

?????????????????? AfxWinInit(hInstance, NULL, _T(""), 0);

?

?????????????????? ….

#endif

….

?????????????????? // wire up this DLL into the resource chain

?????????????????? CDynLinkLibrary* pDLL = new CDynLinkLibrary(coreDLL, TRUE);

?????????????????? ASSERT(pDLL != NULL);

?????????????????? pDLL->m_factoryList.m_pHead = NULL;

?????????????????? ….

???????? }

???????? else if (dwReason == DLL_PROCESS_DETACH)

???????? {

?????????????????? ….

?????????????????? // cleanup module state for this process

?????????????????? AfxTermExtensionModule(coreDLL);

?????????????????? ….

?????????????????? // cleanup module state in OLE private module state

?????????????????? AfxTermExtensionModule(coreDLL, TRUE);

?????????????????? ….

???????? }

???????? …

}

可以看到在提供自動(dòng)化支持時(shí),將調(diào)用AfxWinInit(但MFC的DLL向?qū)?#xff0c;對(duì)于擴(kuò)展DLL卻不允許添加自動(dòng)化支持)。

(在dllmodul.cpp中,MFC常規(guī)DLL)

#ifdef _AFXDLL

static AFX_EXTENSION_MODULE controlDLL;

….

#endif

?

extern "C"

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)

{

???????? if (dwReason == DLL_PROCESS_ATTACH)

???????? {

….

?????????????????? _AFX_THREAD_STATE* pState = AfxGetThreadState();

?????????????????? AFX_MODULE_STATE* pPrevModState = pState->m_pPrevModuleState;

?

?????????????????? // Initialize DLL's instance(/module) not the app's

?????????????????? if (!AfxWinInit(hInstance, NULL, _T(""), 0))

?????????????????? {

??????????????????????????? AfxWinTerm();

??????????????????????????? goto Cleanup;?????? // Init Failed

?????????????????? }

?

?????????????????? ….

#ifdef _AFXDLL

?????????????????? // wire up this DLL into the resource chain

?????????????????? VERIFY(AfxInitExtensionModule(controlDLL, hInstance));

?????????????????? CDynLinkLibrary* pDLL; pDLL = new CDynLinkLibrary(controlDLL);

?????????????????? ASSERT(pDLL != NULL);

#else

?????????????????? AfxInitLocalData(hInstance);

#endif

???????? }

???????? else if (dwReason == DLL_PROCESS_DETACH)

???????? {

….

#ifdef _AFXDLL

?????????????????? AfxTermExtensionModule(controlDLL, TRUE);

#else

?????????????????? AfxTermLocalData(hInstance, TRUE);

#endif

???????? }

???????? …

}

???????? 看到上面的代碼,其實(shí)與MFC擴(kuò)展DLL的代碼大同小異,只過(guò)是MFC常規(guī)DLL可以支持在靜態(tài)鏈接庫(kù)全用MFC DLL,相應(yīng)的初始化/反初始化函數(shù)就變?yōu)榱薃fxInitLocalData/ AfxTermLocalData,在此我們不對(duì)在靜態(tài)鏈接庫(kù)中使用MFC DLL的情況作更多討論。

以及在winmain.cpp中的int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow),在appmodul.cpp中我們可以看到入口函數(shù)的實(shí)現(xiàn):

extern "C" int WINAPI

_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

???????? LPTSTR lpCmdLine, int nCmdShow)

{

???????? // call shared/exported WinMain

???????? return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);

}

看看AfxInitExtensionModule , AfxTermExtensionModule CDynLinkLibrary的定義(afxdll_.h)和實(shí)現(xiàn)(在dllinit.cpp中)就明白了DllMain做了什么:

?

BOOL AFXAPI AfxInitExtensionModule(AFX_EXTENSION_MODULE& state, HMODULE hModule)

{

???????? // only initialize once

???????? if (state.bInitialized)

???????? {

?????????????????? AfxInitLocalData(hModule);

?????????????????? return TRUE;

???????? }

???????? state.bInitialized = TRUE;

???????? // save the current HMODULE information for resource loading

???????? ASSERT(hModule != NULL);

???????? state.hModule = hModule;

???????? state.hResource = hModule;

???????? // save the start of the runtime class list

???????? AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

???????? state.pFirstSharedClass = pModuleState->m_classList.GetHead();

???????? pModuleState->m_classList.m_pHead = pModuleState->m_pClassInit;

?

#ifndef _AFX_NO_OLE_SUPPORT

???????? // save the start of the class factory list

???????? state.pFirstSharedFactory = pModuleState->m_factoryList.GetHead();

???????? pModuleState->m_factoryList.m_pHead = pModuleState->m_pFactoryInit;

#endif

???????? return TRUE;

}

void AFXAPI AfxTermExtensionModule(AFX_EXTENSION_MODULE& state, BOOL bAll)

{

???????? // make sure initialized

???????? if (!state.bInitialized)

?????????????????? return;

?

???????? // search for CDynLinkLibrary matching state.hModule and delete it

???????? ASSERT(state.hModule != NULL);

???????? AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL; )

???????? {

?????????????????? CDynLinkLibrary* pNextDLL = pDLL->m_pNextDLL;

?????????????????? if (bAll || pDLL->m_hModule == state.hModule)

??????????????????????????? delete pDLL;??? // will unwire itself

?????????????????? pDLL = pNextDLL;

???????? }

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

???????? // delete any local storage attached to this module

???????? AfxTermLocalData(state.hModule, TRUE);

???????? // remove any entries from the CWnd message map cache

???????? AfxResetMsgCache();

}

?

class CDynLinkLibrary : public CCmdTarget

{

???????? DECLARE_DYNAMIC(CDynLinkLibrary)

public:

?

// Constructor

???????? explicit CDynLinkLibrary(AFX_EXTENSION_MODULE& state, BOOL bSystem = FALSE);

???????? CDynLinkLibrary(HINSTANCE hModule, HINSTANCE hResource);

?

// Attributes

???????? HMODULE m_hModule;

???????? HMODULE m_hResource;??????????????? // for shared resources

???????? ….

???????? BOOL m_bSystem;???????????????????? // TRUE only for MFC DLLs

// Implementation

public:

???????? CDynLinkLibrary* m_pNextDLL;??????? // simple singly linked list

???????? virtual ~CDynLinkLibrary();

….

};

?

CDynLinkLibrary::CDynLinkLibrary(AFX_EXTENSION_MODULE& state, BOOL bSystem)

{

???????? // copy info from AFX_EXTENSION_MODULE struct

???????? ASSERT(state.hModule != NULL);

???????? m_hModule = state.hModule;

???????? m_hResource = state.hResource;

???????? m_classList.m_pHead = state.pFirstSharedClass;

….

???????? m_bSystem = bSystem;

????????

// insert at the head of the list (extensions will go in front of core DLL)

???????? DEBUG_ONLY(m_pNextDLL = NULL);

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? m_pModuleState->m_libraryList.AddHead(this);

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

}

?

CDynLinkLibrary::CDynLinkLibrary(HINSTANCE hModule, HINSTANCE hResource)

{

???????? m_hModule = hModule;

???????? m_hResource = hResource;

???????? m_classList.m_pHead = NULL;

???????? …

???????? m_bSystem = FALSE;

???????? // insert at the head of the list (extensions will go in front of core DLL)

???????? DEBUG_ONLY(m_pNextDLL = NULL);

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? m_pModuleState->m_libraryList.AddHead(this);

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

}

CDynLinkLibrary::~CDynLinkLibrary()

{

???????? // remove this frame window from the list of frame windows

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? m_pModuleState->m_libraryList.Remove(this);

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

}

?????? 由此我們可以看出DLL初始化時(shí)先調(diào)AfxInitExtensionModule是為了構(gòu)造一個(gè)AFX_EXTENSION_MODULE,然后將它插入插入一個(gè)AFX_MODULE_STATE鏈表中,同時(shí)將當(dāng)前DLL的HINSTANCE插入此AFX_MODULE_STATE的CDynLinkLibrary鏈表中,以便稍后講到的AfxFindResourceHandle找到。DLL從內(nèi)存移出時(shí)就從此鏈表中刪除自己。

讓我們來(lái)看看AfxFindResourceHandle的實(shí)現(xiàn)(dllinit.cpp):

HINSTANCE AFXAPI AfxFindResourceHandle(LPCTSTR lpszName, LPCTSTR lpszType)

{

???????? ASSERT(lpszName != NULL);

???????? ASSERT(lpszType != NULL);

?

???????? HINSTANCE hInst;

?

???????? // first check the main module state

???????? AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

???????? if (!pModuleState->m_bSystem)

???????? {

?????????????????? hInst = AfxGetResourceHandle();

?????????????????? if (::FindResource(hInst, lpszName, lpszType) != NULL)

??????????????????????????? return hInst;

???????? }

?

???????? // check for non-system DLLs in proper order

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? CDynLinkLibrary* pDLL;

???????? for (pDLL = pModuleState->m_libraryList; pDLL != NULL;

?????????????????? pDLL = pDLL->m_pNextDLL)

???????? {

?????????????????? if (!pDLL->m_bSystem && pDLL->m_hResource != NULL &&

??????????????????????????? ::FindResource(pDLL->m_hResource, lpszName, lpszType) != NULL)

?????????????????? {

??????????????????????????? // found it in a DLL

??????????????????????????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

??????????????????????????? return pDLL->m_hResource;

?????????????????? }

???????? }

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

?

???????? // check language specific resource next

???????? hInst = pModuleState->m_appLangDLL;

???????? if (hInst != NULL && ::FindResource(hInst, lpszName, lpszType) != NULL)

?????????????????? return hInst;

?

???????? // check the main system module state

???????? if (pModuleState->m_bSystem)

???????? {

?????????????????? hInst = AfxGetResourceHandle();

?????????????????? if (::FindResource(hInst, lpszName, lpszType) != NULL)

??????????????????????????? return hInst;

???????? }

?

???????? // check for system DLLs in proper order

???????? AfxLockGlobals(CRIT_DYNLINKLIST);

???????? for (pDLL = pModuleState->m_libraryList; pDLL != NULL; pDLL = pDLL->m_pNextDLL)

???????? {

?????????????????? if (pDLL->m_bSystem && pDLL->m_hResource != NULL &&

??????????????????????????? ::FindResource(pDLL->m_hResource, lpszName, lpszType) != NULL)

?????????????????? {

??????????????????????????? // found it in a DLL

??????????????????????????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

??????????????????????????? return pDLL->m_hResource;

?????????????????? }

???????? }

???????? AfxUnlockGlobals(CRIT_DYNLINKLIST);

?

???????? // if failed to find resource, return application resource

???????? return AfxGetResourceHandle();

}

上面的代碼首先檢查主模塊的狀態(tài),通過(guò)返回的是個(gè)AFX_MODULE_STATE的類對(duì)象指針. AFX_MODULE_STATE又是個(gè)什么呢?下面看看AFX_MODULE_STATE的定義(afxstat_.h中,它的實(shí)現(xiàn)在afxstate.cpp中,有興趣的讀者可以讀讀):

// AFX_MODULE_STATE (global data for a module)

class AFX_MODULE_STATE : public CNoTrackObject

{

public:

#ifdef _AFXDLL

???????? AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion,

?????????????????? BOOL bSystem = FALSE);

#else

???????? explicit AFX_MODULE_STATE(BOOL bDLL);

#endif

???????? ~AFX_MODULE_STATE();

?

???????? CWinApp* m_pCurrentWinApp;

???????? HINSTANCE m_hCurrentInstanceHandle;

???????? HINSTANCE m_hCurrentResourceHandle;

???????? LPCTSTR m_lpszCurrentAppName;

???????? BYTE m_bDLL;??? // TRUE if module is a DLL, FALSE if it is an EXE

???????? BYTE m_bSystem; // TRUE if module is a "system" module, FALSE if not

???????? …

?

#ifdef _AFXDLL

???????? // CDynLinkLibrary objects (for resource chain)

???????? CTypedSimpleList<CDynLinkLibrary*> m_libraryList;

?

???????? // special case for MFC71XXX.DLL (localized MFC resources)

???????? HINSTANCE m_appLangDLL;

#endif

….

};

我們來(lái)看看我們關(guān)心的屬性

CWinApp* m_pCurrentWinApp;

HINSTANCE m_hCurrentInstanceHandle;

HINSTANCE m_hCurrentResourceHandle;

LPCTSTR m_lpszCurrentAppName;

?

BYTE m_bDLL;??? // TRUE if module is a DLL, FALSE if it is an EXE

BYTE m_bSystem; // TRUE if module is a "system" module, FALSE if not

// CDynLinkLibrary objects (for resource chain)

CTypedSimpleList<CDynLinkLibrary*> m_libraryList;

?

// special case for MFC71XXX.DLL (localized MFC resources)

HINSTANCE m_appLangDLL;

看了相關(guān)注釋,也就明白什么意思了,在此就不多解釋了。

?

如果當(dāng)前主模塊是系統(tǒng)模塊(通過(guò)m_bSystem標(biāo)識(shí)),并且從當(dāng)前模塊中找到了相應(yīng)的資源就返回此模塊的HINSTANCE。接下來(lái)當(dāng)前模塊所載的DLL鏈表中的所有用戶模塊中查找,本地化的MFC資源DLL中查找,系統(tǒng)DLL中查找。如果都找不到則從EXE(或者通過(guò)AfxSetResouceHandle中設(shè)置的HINSTANCE)中查找。

如果不考慮DLL鏈表,則需要我們每次使用DLL中的資源前調(diào)用AfxSetResouceHandle,使用后再調(diào)用AfxSetResourceHandle,就同前面講的在靜態(tài)鏈接庫(kù)中使用MFC DLL一樣。麻不麻煩?

怎么解決呢?解決方法是用資源DLL的HINSTANCE構(gòu)造一CDynLinkLibrary對(duì)象插入主模塊(EXE)的AFX_MODULE_STATE的m_libraryList中。怎么做?

看了上面DllMain的實(shí)現(xiàn)代碼,我們可以照著做。

static AFX_EXTENSION_MODULE ResouceDLL = { NULL, NULL }

BOOL CXApp::InitInstance()

{

// Get the resource DLL instance

???????? if (!AfxInitExtensionModule(ResouceDLL, hResourceModule))

???????? ???????? return 0;

new CDynLinkLibrary(ResouceDLL);??

}

int CGenericMFCApp::ExitInstance()

{

AfxTermExtensionModule(ResouceDLL);

???????? return CWinApp::ExitInstance();

}

這樣我們就可以在應(yīng)用程序中安全的使用DLL中的資源了,就好比EXE中的一樣。對(duì)于我們自己編寫(xiě)入口函數(shù)的DLL,如果其中涉及到資源的話,我們可以參考上述的MFC常規(guī)DLL的實(shí)現(xiàn)。

對(duì)于我們?cè)贏ctiveX和一些DLL中的AFX_MANAGE_STATE(AfxGetStaticModuleState());我們又怎么理解呢?看看afxstat_.h:

#ifdef _AFXDLL

class _AFX_THREAD_STATE;

struct AFX_MAINTAIN_STATE2

{

???????? explicit AFX_MAINTAIN_STATE2(AFX_MODULE_STATE* pModuleState);

???????? ~AFX_MAINTAIN_STATE2();

protected:

???????? AFX_MODULE_STATE* m_pPrevModuleState;

???????? _AFX_THREAD_STATE* m_pThreadState;

};

#define AFX_MANAGE_STATE(p) AFX_MAINTAIN_STATE2 _ctlState(p);

#else? // _AFXDLL

#define AFX_MANAGE_STATE(p)

#endif //!_AFXDLL

?

對(duì)于在靜態(tài)庫(kù)中使用MFC DLL時(shí)它就相當(dāng)于不存在,反之,它構(gòu)造一個(gè)AFX_MAINTAIN_STATE2對(duì)象,在afxstate.cpp中

#ifdef _AFXDLL

?

AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(AFX_MODULE_STATE* pNewState)

{

???????? m_pThreadState = _afxThreadState;

???????? m_pPrevModuleState = m_pThreadState->m_pModuleState;

???????? m_pThreadState->m_pModuleState = pNewState;

}

#endif //_AFXDLL

,

再看dllmodul.cpp中有關(guān)AfxGetStaticModuleState的實(shí)現(xiàn):

?

static _AFX_DLL_MODULE_STATE afxModuleState;

?

?

AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState()

{

???????? AFX_MODULE_STATE* pModuleState = &afxModuleState;

???????? return pModuleState;

}

?

(MFC中太多的全局變量的確不雅!)

可以看到通過(guò)構(gòu)造一個(gè)AFX_MAINTAIN_STATE2對(duì)象(再結(jié)合AfxGetResouceHandle的實(shí)現(xiàn)),就使AfxFindResourceHandle返回的是ActiveX控件(實(shí)際上也是一個(gè)常規(guī)DLL)或DLL的HINSTANE了,這樣AfxFindResourceHandle就不必須在DLL鏈表中查找了,但缺點(diǎn)是每次使用資源(或響應(yīng)消息)時(shí)都要構(gòu)造一個(gè)AFX_MAINTAIN_STATE2對(duì)象,并且,而且使用這種方法在此DLL中無(wú)法使用其它DLL中的資源或在EXE中使用DLL中的資源(在不使用AfxSetResourceHandle/AfxGetResourceHandle的前提下)。當(dāng)然,我們這兒關(guān)心的只是資源的使用,如果涉及到其它,包括事件響應(yīng)或多個(gè)UI線程時(shí),AFX_MODULE_STATE還是不能少的。

超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的如何使用动态链接库中的资源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

三级黄色网址 | 最近中文字幕大全中文字幕免费 | 亚洲天堂色婷婷 | 久久免费视频8 | 狠狠干狠狠艹 | 99婷婷狠狠成为人免费视频 | 婷婷精品国产欧美精品亚洲人人爽 | 日本h在线播放 | 色综合久久久久综合体 | 亚洲精品九九 | 久草剧场 | 精品视频www | 久久久久国产精品视频 | 少妇bbb搡bbbb搡bbbb| 天天操天天射天天操 | 国产精品永久久久久久久www | 中文字幕网址 | 日韩在线一二三区 | 色婷久久 | 美女黄频在线观看 | 东方av免费在线观看 | 天天色天天色天天色 | 高潮毛片无遮挡高清免费 | 日韩精品在线一区 | 精品国产一区二区三区男人吃奶 | 日韩在线视频免费看 | 精品一区精品二区高清 | 国产成人精品久久亚洲高清不卡 | 欧美一级免费高清 | 国产不卡在线播放 | 91视频在线| 97人人爽人人 | 91中文字幕在线视频 | 欧美日韩久久 | 国产在线免费av | 91九色蝌蚪国产 | 天天干,天天射,天天操,天天摸 | www.久久久久 | 亚洲国产色一区 | 狠狠干网 | 久久伊人八月婷婷综合激情 | 天堂麻豆 | 国产亚洲精品美女 | 日韩久久视频 | 中文字幕色网站 | 91av资源在线| av免费网站观看 | 青青草久草在线 | 亚洲精品美女久久17c | 久久综合在线 | 夜夜骑天天操 | 免费日韩一区二区三区 | 99精品久久久久 | 国产成人精品久久亚洲高清不卡 | 国产成人精品一区二区三区 | 欧美日韩高清不卡 | 国产精品video爽爽爽爽 | 中文字幕精品三区 | 国产一级片在线播放 | 中文免费 | 91完整版在线观看 | 成人av电影免费在线播放 | 久久久久久久久久久高潮一区二区 | 国精产品永久999 | 青青久草在线视频 | 在线观看一区二区精品 | 国产成人99久久亚洲综合精品 | 国产亚洲精品综合一区91 | 成人黄色电影在线 | 伊人狠狠色 | 中文av在线免费观看 | 免费视频久久久久久久 | 最近中文字幕在线 | 亚洲一区二区视频 | 五月天狠狠操 | 天天干天天操天天拍 | 在线直播av | 视频国产区 | 色资源二区在线视频 | 香蕉网在线播放 | 久久精品久久99精品久久 | 成人黄色在线电影 | 国产综合精品一区二区三区 | 九九九在线观看视频 | 久久视频精品在线 | 天天摸天天舔天天操 | 久热国产视频 | 韩国av电影在线观看 | 波多野结衣一区二区 | 又色又爽的网站 | 色偷偷88888欧美精品久久 | 精品国产一区二区三区久久 | 99视频这里有精品 | 九九视频精品免费 | 国产久视频 | 最近中文字幕大全中文字幕免费 | 亚洲天堂免费视频 | 韩日精品中文字幕 | 成人黄色一级视频 | 国产不卡视频在线 | 中文字幕一区二区三区乱码在线 | 亚洲午夜久久久影院 | 亚洲经典视频在线观看 | 中文字幕视频在线播放 | 亚洲亚洲精品在线观看 | 国内精品久久久久久久久久清纯 | 天天天天干 | 一区二区三区久久精品 | 99久久国产免费,99久久国产免费大片 | 久久激情综合 | 狠狠色香婷婷久久亚洲精品 | 国产精品99久久99久久久二8 | 婷婷开心久久网 | av高清在线 | 欧美在线一 | 亚洲伊人网在线观看 | 日韩理论电影在线观看 | 99久久精品久久久久久清纯 | 成人午夜电影在线 | 男女免费av | 91丨九色丨蝌蚪丨对白 | 五月天,com| 日本二区三区在线 | 久久影视一区二区 | 九九在线视频 | 国产人免费人成免费视频 | 久久精品人人做人人综合老师 | 日本久久高清视频 | 婷婷丁香六月 | 国内精品久久久久影院一蜜桃 | 蜜桃av人人夜夜澡人人爽 | 国产精品久久久久久久电影 | 手机av电影在线 | 久久人人爽人人人人片 | 久久理论视频 | 香蕉色综合| 超碰av在线免费观看 | 日韩精品视频在线观看免费 | 国产精品99久久99久久久二8 | 999久久久免费视频 午夜国产在线观看 | 国产伦精品一区二区三区在线 | 亚洲视频在线免费观看 | 国产亚洲精品久久久久久电影 | 免费观看一级一片 | 99久久久国产精品免费99 | 四虎影视国产精品免费久久 | 国产精品一区二区你懂的 | 美女国产精品 | 午夜三级福利 | 97视频在线观看视频免费视频 | 99久视频 | 91麻豆文化传媒在线观看 | 国产精品 国内视频 | 91丨九色丨国产在线观看 | 久久99精品波多结衣一区 | 国产激情电影综合在线看 | 在线亚洲欧美日韩 | 天天天天射 | 91免费版成人 | 久久久久在线 | 天天夜夜亚洲 | 欧美另类色图 | 日韩欧美视频免费在线观看 | 亚洲无在线| www.99av| 国产伦精品一区二区三区高清 | 久久福利在线 | 中文字幕精品www乱入免费视频 | 在线 国产一区 | 黄色a视频免费 | 日韩精品久久久久久 | 色a4yy| 99精品偷拍视频一区二区三区 | 天天射天天干 | 免费看亚洲毛片 | 国产精品麻豆一区二区三区 | 狠狠色噜噜狠狠 | 久久高清毛片 | 99精品免费 | 国产精品一区二区在线观看免费 | 天天操狠狠操夜夜操 | 91传媒免费在线观看 | 国产免费一区二区三区最新6 | 成人性生活大片 | 婷婷精品在线视频 | 久久综合九色综合97_ 久久久 | 日日操网站 | 亚洲精品麻豆视频 | 综合色中色 | 亚洲激色 | 久久精品视频在线观看免费 | 亚洲精品视频第一页 | 国产伦理一区 | 国产91大片 | 黄色一级动作片 | 国产视频在线观看一区二区 | 国产中的精品av小宝探花 | 精品久久网 | 亚洲涩涩涩涩涩涩 | 玖玖在线看 | 天天搞天天干天天色 | 精品久久中文 | 亚洲精品乱码久久久久久蜜桃91 | 中文字幕 国产视频 | 干av在线 | 国产精品涩涩屋www在线观看 | 国产99久久精品 | 久久99偷拍视频 | 欧美天堂视频在线 | 激情综合色图 | 天堂视频一区 | 日韩精品无码一区二区三区 | a级片在线播放 | 91一区在线观看 | 四虎影视成人 | 亚洲国产精品传媒在线观看 | 久久a久久 | 在线激情影院一区 | 91精品在线播放 | 精品国产一二区 | 久久视频网 | 天天骚夜夜操 | 久久爱992xxoo| 中文字幕中文中文字幕 | 91久久精品一区二区二区 | 操老逼免费视频 | 在线观看中文字幕一区 | 免费日韩高清 | 日本mv大片欧洲mv大片 | 欧美视频www | 91在线日韩 | 一二三精品视频 | 中文在线www | 中文字幕一区在线观看视频 | 免费视频99| 国产色拍 | 色婷婷激情电影 | 国产精品久久久久久久久久久久午夜 | 国产高清视频免费 | 五月天久久婷 | 精品在线视频观看 | 99色婷婷| 国产操在线| 久久黄色网页 | 在线岛国av| 亚洲另类视频在线观看 | 久久精品视频2 | 国产91精品一区二区麻豆亚洲 | 又黄又爽又色无遮挡免费 | 天天操夜操视频 | 在线免费视频你懂的 | 久久99精品久久久久久清纯直播 | 中文字幕一区二区三区四区在线视频 | 国产五月色婷婷六月丁香视频 | 国产成人精品国内自产拍免费看 | 97碰在线视频 | 香蕉久久久久 | 九九免费观看视频 | 三级在线视频播放 | 成人在线一区二区三区 | 就要干b | 9999精品 | 天天摸夜夜添 | 不卡av免费在线观看 | 91人人网| 免费的黄色av | 999视频在线播放 | 久久毛片高清国产 | 久久精品2 | 日韩精品免费在线 | 久久99国产精品自在自在app | 香蕉影视在线观看 | 久久九九国产精品 | 五月天电影免费在线观看一区 | 久久热亚洲 | 久久久久久国产一区二区三区 | 成人av在线直播 | 成人a免费看| 国产精品综合久久久 | 国产丝袜 | 99精品久久久 | jizz18欧美18| 成人sm另类专区 | 久久免费观看视频 | 永久免费毛片在线观看 | av成人在线观看 | 字幕网av | 中文字幕一区二区三 | www黄色大片| 永久免费视频国产 | 狠狠色丁香婷综合久久 | 日韩精品视频免费专区在线播放 | 久久午夜视频 | 亚洲欧美少妇 | 午夜狠狠干 | 久久伊人爱 | 久久99国产精品免费网站 | 国产美女在线精品免费观看 | 久久久久久久久久久久影院 | 91丨九色丨国产女 | 国产一级二级在线播放 | 久久久久高清毛片一级 | 久久久精品 一区二区三区 国产99视频在线观看 | 国产中出在线观看 | 久久96国产精品久久99软件 | 久久久久 | 狠狠干天天 | 欧美一区二区在线刺激视频 | 久久免费99精品久久久久久 | 免费性网站| 日韩精品久久久久 | 狠狠狠色丁香婷婷综合激情 | 日本中文在线观看 | 亚洲天堂视频在线 | 国产97在线视频 | 日韩高清黄色 | 久久a国产 | 亚洲视频2 | 久草视频网| 久久五月精品 | 久久精品在线视频 | 麻豆传媒一区二区 | 91麻豆精品国产91久久久无限制版 | 手机成人免费视频 | 国产免费又粗又猛又爽 | 又长又大又黑又粗欧美 | 亚洲精品动漫久久久久 | 精品91| 久久艹艹 | 国产三级视频 | 四虎天堂| 日韩美精品视频 | 在线中文字幕网站 | 欧美一区在线观看视频 | 国产在线小视频 | 综合视频在线 | 亚洲精品乱码久久久久久按摩 | 日韩免费高清在线 | 国产91勾搭技师精品 | 国产一二区视频 | 国产一区二区三区视频在线 | 欧美在线观看视频 | 久久精品人 | 中文字幕制服丝袜av久久 | 亚洲国产精品小视频 | 日韩欧美在线国产 | 97电影在线 | 韩日精品中文字幕 | 国产中文字幕在线播放 | 欧美日韩超碰 | 91九色在线 | 精品国产1区2区3区 国产欧美精品在线观看 | 福利视频区 | 27xxoo无遮挡动态视频 | 麻花豆传媒mv在线观看网站 | 欧美日韩国产伦理 | 91久久影院 | 成人黄性视频 | 91av免费观看 | 日日夜夜精品视频天天综合网 | 日韩视频专区 | 欧美性生活免费 | 91黄色视屏 | 日韩av电影手机在线观看 | 婷婷在线视频观看 | 91精品国产91久久久久 | 亚洲激情p| wwwav视频| 91精品国自产在线 | 国产精品成久久久久 | 久久综合导航 | 久久国产影院 | 久久久久看片 | 97精产国品一二三产区在线 | 99精品99| 国内视频一区二区 | 欧美日韩91 | 粉嫩av一区二区三区四区在线观看 | 西西www4444大胆视频 | 免费午夜视频在线观看 | 日韩电影中文字幕在线观看 | 国内精品久久久久久久久 | 国产v亚洲v | 人人玩人人添人人 | 国产涩涩在线观看 | 国产精品一区二区三区在线免费观看 | 91精品影视 | 97国产精品 | 精品国产视频在线观看 | 国产精品黄色av | 深爱激情久久 | 99超碰在线观看 | 日韩在线视频一区二区三区 | 国产中文字幕一区二区 | 西西www4444大胆在线 | 日韩视频免费观看高清 | 国产精品爽爽爽 | 国产在线精品一区 | 欧美日韩国产综合网 | 国产黄网站在线观看 | 欧美与欧洲交xxxx免费观看 | 亚洲成a人片77777潘金莲 | 成人av手机在线 | 国产精品美 | 深爱激情五月网 | 在线精品在线 | 午夜手机电影 | 欧美日韩高清免费 | 成人三级网站在线观看 | 久久精品影片 | 不卡视频在线看 | 欧美精品999 | 亚洲精品在线视频播放 | 天天色天天爱天天射综合 | 欧美极品少妇xbxb性爽爽视频 | 国产成人久久av977小说 | 日韩精品一区二区三区免费视频观看 | 免费人做人爱www的视 | 国产精品11| 午夜精品久久久久久 | 欧美日韩高清 | 欧美狠狠操 | 亚洲国产久 | 1000部18岁以下禁看视频 | 中文字幕在线看视频国产中文版 | 久久不射电影网 | 综合天堂av久久久久久久 | 中文字幕在线免费观看 | 国产成人精品区 | 日韩在线观看网站 | 亚洲精品国产精品乱码在线观看 | 国产精品va在线观看入 | 免费在线播放黄色 | 国产精品系列在线观看 | 在线免费看黄网站 | 婷婷激情网站 | 黄色a级片在线观看 | 成人免费电影 | 婷婷色视频 | 嫩嫩影院理论片 | 97在线观看视频国产 | 1024在线看片 | 亚洲综合爱 | 99成人免费视频 | 开心色婷婷| 国产视频 久久久 | 黄色成人影视 | 日韩三级视频在线看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 91精品在线免费观看视频 | 99精品国产成人一区二区 | 最新av在线播放 | 久久久午夜精品福利内容 | 午夜精品一区二区三区四区 | 中文字幕资源站 | 久久精品99久久 | 日韩.com | 在线免费观看视频a | 色综合久久久久综合体桃花网 | 国产品久精国精产拍 | 久久丁香网 | 91人人揉日日捏人人看 | 天天色天天骑天天射 | 久久婷婷一区 | 日韩在线观看第一页 | 97色国产 | 国内精品久久久久久久久久久久 | 中文综合在线 | 亚洲国产三级在线观看 | 五月天婷婷免费视频 | 国产亚洲婷婷免费 | 国产精品亚 | 国产精品丝袜久久久久久久不卡 | 婷婷在线网 | 亚洲欧美日韩国产一区二区三区 | 狠狠的干狠狠的操 | 在线观看日本高清mv视频 | 久久精品视频中文字幕 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 人人涩| 91麻豆精品国产91久久久无需广告 | 六月丁香激情综合色啪小说 | 久久99热精品这里久久精品 | 98涩涩国产露脸精品国产网 | 狠狠色狠狠色综合日日92 | 97人人澡人人添人人爽超碰 | 99精品区| 久草在线欧美 | 黄色avwww| 天天干天天操天天入 | 国产精品无av码在线观看 | 在线a人v观看视频 | 国产亚洲va综合人人澡精品 | 91福利国产在线观看 | 亚洲天堂激情 | 91精品免费看 | 国产玖玖在线 | 精品免费观看 | 蜜臀av麻豆 | 久久av在线播放 | 免费合欢视频成人app | 国产专区精品 | 日本在线观看中文字幕 | 在线成人免费电影 | 色婷婷欧美 | 国产人成看黄久久久久久久久 | 国产大尺度视频 | 人人干狠狠操 | 天天·日日日干 | 在线欧美日韩 | 国产精品欧美一区二区三区不卡 | 日韩av影视| 狠狠狠狠狠狠狠 | 黄色视屏免费在线观看 | 99热这里精品 | 成人免费大片黄在线播放 | 国产精品99页 | 色综合天天爱 | 在线日韩中文 | 久久深爱网 | 99精品视频免费在线观看 | 又黄又刺激的网站 | 亚洲欧洲精品一区 | 成人av资源在线 | 99这里只有精品视频 | 国产精品视频一二三 | 亚洲精品88欧美一区二区 | 日韩免费一级a毛片在线播放一级 | 国产精品刺激对白麻豆99 | 91福利社区在线观看 | 亚洲日本在线一区 | 黄色一级在线视频 | 夜夜澡人模人人添人人看 | 日本午夜在线亚洲.国产 | 97超碰人人澡人人爱 | 黄色一级在线免费观看 | 一区二区电影在线观看 | 一本一道波多野毛片中文在线 | 夜夜爽夜夜操 | 又污又黄网站 | 亚洲不卡123| 97色se | 国产精品久久久777 成人手机在线视频 | 免费a v视频 | 韩国av免费观看 | 日韩在线观看视频中文字幕 | 久久久精品网站 | 在线看v片| 天天干人人插 | 超碰97免费 | 超碰在线天天 | 六月丁香综合网 | 日本精品一区二区三区在线观看 | 9999国产| 国产精品激情在线观看 | 日韩三级视频在线观看 | 久久99精品国产麻豆婷婷 | 精品久久久久久久久久久院品网 | 国产一区免费在线观看 | 亚洲国产免费网站 | 中文字幕在线第一页 | 69久久99精品久久久久婷婷 | 开心激情五月婷婷 | 国产香蕉97碰碰碰视频在线观看 | 91精品少妇偷拍99 | 久久久网页 | 亚洲欧美日韩在线一区二区 | 色av色av色av | 美女视频黄免费的久久 | 国产精品入口久久 | 色亚洲激情| 国产不卡视频在线播放 | 国产精品福利午夜在线观看 | 成人av网站在线观看 | 亚洲一区不卡视频 | 亚洲成人精品影院 | 色视频在线免费 | 国产精品地址 | 久久精品一区二区三区视频 | 成人h视频在线 | 久久成人国产精品入口 | 色婷婷国产 | 欧美日产在线观看 | 国产成人333kkk | 五月综合在线观看 | 伊人色综合久久天天 | 444av| 亚州av免费 | 国产精品一区二区美女视频免费看 | 色天天综合网 | 亚洲精品视频在线看 | 国产成人一区二区三区影院在线 | 亚洲国产人午在线一二区 | 色婷婷伊人 | 久草久热 | 超碰av在线 | 久久久久国产一区二区三区四区 | 亚洲欧美视频 | 国产视频中文字幕 | 国产精品伦一区二区三区视频 | 奇米影音四色 | 国产日韩视频在线 | 人人射网站| 中文av一区二区 | 黄网站色视频 | 国产成人精品久久久久 | 日韩欧美国产视频 | 日韩美在线 | 国产高清在线精品 | 嫩草av影院 | av免费高清观看 | 这里只有精品视频在线 | 日韩精品一区不卡 | 999热线在线观看 | 亚洲91精品在线观看 | 深爱激情五月网 | 国产二区视频在线 | 91视频在线观看大全 | 国产精品一区二区三区在线看 | 国产精品免费一区二区三区在线观看 | 久草在线视频看看 | 国产永久免费观看 | 免费av电影网站 | 伊人影院在线观看 | 欧美成人一二区 | 久久久综合香蕉尹人综合网 | 亚洲一区日韩精品 | 午夜视频黄 | 日韩高清www | www色综合| 免费看三级 | 国产精品美女久久久久久久 | 久久久久久久久久久久av | 日韩网站一区二区 | 三三级黄色片之日韩 | 国产成人免费网站 | 久草免费色站 | www视频在线播放 | 国产精品一区二区三区观看 | 日韩在线观看视频一区二区三区 | 久久久久久久影视 | 国产不卡毛片 | 欧美精品久久久久 | 欧美午夜精品久久久久 | 色婷婷综合久久久久 | 亚洲精品在线观看中文字幕 | 国产伦理一区 | 一级性视频 | 国产亚洲精品久 | 一区二区在线电影 | 玖玖视频免费在线 | 欧美性春潮 | 一区二区视频电影在线观看 | 国产精品久久久久久久久久久久午 | 久久乐九色婷婷综合色狠狠182 | 国产在线观看99 | 日本三级香港三级人妇99 | 午夜三级影院 | 亚洲福利精品 | www.五月婷婷.com| 免费在线观看av片 | 国产精品久久久久久久久久久久久 | 欧美一级专区免费大片 | 欧美日韩三区二区 | 888av| 91桃色视频 | 免费在线黄网 | av电影中文字幕 | 久久精品国产免费看久久精品 | 日日夜操 | 精一区二区 | 免费看的黄色网 | 国产精品一区二区果冻传媒 | 日批视频在线观看免费 | 欧美与欧洲交xxxx免费观看 | 亚洲欧洲一区二区在线观看 | 国产一区免费看 | 成片视频免费观看 | 婷婷资源站 | 樱空桃av| 日本精品一区二区三区在线观看 | 国产丝袜 | 久久久999精品视频 国产美女免费观看 | 天天做综合网 | 看污网站 | 超碰人人草 | 亚洲精品一区二区三区在线观看 | 少妇搡bbbb搡bbb搡aa | 亚洲狠狠 | 国产麻豆成人传媒免费观看 | 色视频国产直接看 | 6080yy精品一区二区三区 | 深夜福利视频一区二区 | 国产精品四虎 | 丁香导航| 天天色天天搞 | 人人爽人人舔 | 色婷婷激婷婷情综天天 | 国产在线p | 91综合久久一区二区 | 少妇av片 | 亚洲激情校园春色 | 亚洲日韩中文字幕在线播放 | 99热播精品 | 国产剧情一区二区在线观看 | 久久精品网站免费观看 | 日本护士三级少妇三级999 | 97网在线观看 | 久久国产美女视频 | 国产91免费观看 | 99成人精品 | 福利av影院 | 久久久亚洲国产精品麻豆综合天堂 | 日韩亚洲在线视频 | 在线视频久 | 久久综合操| 久久亚洲影视 | 一本之道乱码区 | 日本在线视频一区二区三区 | 国产黄色片久久久 | 久操久 | 免费看一级黄色 | 免费91麻豆精品国产自产在线观看 | 午夜视频亚洲 | 国产精品久久久久久久免费大片 | 日韩理论电影网 | 中文字幕在线字幕中文 | 日日夜夜精品网站 | av在线影视 | 五月婷婷导航 | 韩国精品一区二区三区六区色诱 | 欧美在线视频不卡 | 992tv又爽又黄的免费视频 | 亚洲欧洲成人精品av97 | 欧美二区在线播放 | 亚洲综合激情 | 99久久99视频只有精品 | 97av影院| 日韩欧美高清 | 久久九九免费视频 | 亚洲精品在线视频播放 | 日一日操一操 | 国产精品一区在线播放 | 亚洲综合国产精品 | 97影视 | 亚洲一区二区视频在线播放 | 2023国产精品自产拍在线观看 | 国产精品嫩草影院123 | 久久精品一区八戒影视 | 不卡的av| 亚洲 欧美变态 另类 综合 | 国产精品久久久精品 | 色狠狠综合天天综合综合 | 日韩久久精品一区二区三区 | 丝袜网站在线观看 | 国产欧美综合视频 | 在线香蕉视频 | 九九热免费在线观看 | 激情五月看片 | 免费精品视频在线 | 美女国内精品自产拍在线播放 | 免费a级大片 | 黄色一级大片在线观看 | 国产精品一区二区电影 | 成人免费在线网 | 97视频在线免费 | 欧美另类xxxx| 久久毛片视频 | 国产福利a | 国产精品11 | 久久深爱网 | 亚洲欧洲av | 日韩免费网址 | 久久精品系列 | 日韩欧美在线一区 | 成年人在线观看视频免费 | 特级西西www44高清大胆图片 | 国产一级视频在线观看 | 91视频在线 | 草久久久久久久 | 国产精品美女久久久久久久久久久 | 亚洲国产中文字幕 | 成人黄色毛片视频 | 亚洲欧洲一区二区在线观看 | 色资源二区在线视频 | 西西www444 | 丁香久久综合 | 日本不卡一区二区 | 亚洲成人网av| 亚洲精品在 | 在线免费观看视频 | 欧美日韩一级在线 | 日韩在线精品视频 | 国产成人精品一二三区 | 九九久久免费 | 亚洲欧美视频在线 | 最近中文字幕久久 | 国产精品不卡 | 在线观看aa | 国产最新视频在线 | 天天操天天色天天射 | 国产精品久久久久一区 | 在线中文字幕播放 | 日日碰狠狠躁久久躁综合网 | 日韩a级免费视频 | 99色人| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | av亚洲产国偷v产偷v自拍小说 | 国产精品 国内视频 | 日韩av偷拍 | 精品久久久久一区二区国产 | 久久激情电影 | 制服丝袜天堂 | 蜜臀av在线一区二区三区 | 亚洲电影第一页av | 久久久一本精品99久久精品66 | 91亚洲精品国产 | 欧美一级性生活片 | 国产99久久久国产精品免费二区 | 少妇18xxxx性xxxx片 | 狠狠88综合久久久久综合网 | 波多野结衣在线视频一区 | 国产中文字幕第一页 | 日韩精品视频一二三 | 丁香色天天 | 人人澡人人爱 | 精品国产日本 | 亚洲理论在线观看电影 | 精品一区二区精品 | 三级视频日韩 | 国产精品字幕 | 黄色av网站在线观看 | .国产精品成人自产拍在线观看6 | 超碰在线人 | 国产精品毛片一区二区三区 | 黄色毛片网站在线观看 | 狠狠的干狠狠的操 | 久久精品视频18 | 免费亚洲精品视频 | 国内免费久久久久久久久久久 | 欧美一级免费片 | 久久爱导航 | 免费av网址在线观看 | 欧美激情精品久久久久久 | 99在线观看视频 | 国产在线久久久 | 国产精品高潮呻吟久久av无 | 国语久久| 日韩大片在线播放 | 国产在线理论片 | 五月综合 | 色久综合 | 中文在线字幕免费观看 | 精品在线你懂的 | 午夜av色| 中文字幕一区二区在线播放 | 中文字幕一区二 | 婷婷色在线 | www.色的 | www.日日日.com | 久热爱 | 国产成人精品av | 欧美aa在线| 欧美最爽乱淫视频播放 | 成人午夜电影久久影院 | 欧美日韩中文字幕在线视频 | 国产亚洲高清视频 | 久久毛片网站 | 色 免费观看 | 五月婷婷一区二区三区 | 日韩高清毛片 | 婷婷国产在线观看 | 免费在线观看一级片 | 国产午夜精品免费一区二区三区视频 | 亚洲日本在线一区 | 日韩一级成人av | 国产成人免费 | 超碰97免费在线 | 久久草网 | 91精品免费在线视频 | 欧美成人影音 | 久久久久久久久国产 | 狠狠色丁香婷婷综合 | av一级网站| 伊人久久影视 | 久久免费视频这里只有精品 | 婷婷丁香综合 | 国产精品2区 | 91视频麻豆视频 | 99爱国产精品 | 91爱爱视频| 欧美一区二区三区在线看 | 国产色 在线 | 色视频在线看 | 国产一区二区三精品久久久无广告 | 国产精品视频全国免费观看 | 国产剧情亚洲 | 色免费在线 | 午夜精品电影一区二区在线 | 国产精品久久久久久久久久久杏吧 | 亚州五月| 国产不卡一| 国产女v资源在线观看 | 91九色在线观看 | 麻豆视频在线免费观看 | 天天操天天舔天天爽 | 色婷婷色 | 久久激情精品 | 久久激情五月丁香伊人 | 亚洲天天综合 | 区一区二区三区中文字幕 | 9999精品免费视频 | 久草在线综合网 | 久草视频免费看 | 欧美a视频在线观看 | 久久免费精彩视频 | 婷婷五月在线视频 | 在线观影网站 | 伊人亚洲综合网 | 国产精品久免费的黄网站 | 久久99热精品| 国产1级视频| 六月久久婷婷 | 人人爽久久久噜噜噜电影 | 99亚洲国产精品 | 亚洲三级黄 | 免费久久久| 国产亚洲日 | 国产在线视频一区二区三区 | 国产无套视频 | 深夜免费福利网站 | 三级大片网站 | 久二影院 | 色偷偷人人澡久久超碰69 | 日本精品一区二区三区在线播放视频 | 婷婷六月天综合 | 免费在线观看毛片网站 | 久久人人爽人人爽人人片av软件 | 天天天天色综合 | 成人久久18免费网站 | 深爱婷婷久久综合 | 久久亚洲成人网 | 久久福利影视 | 黄色小说视频在线 | a级片在线播放 | 波多野结衣电影一区二区 | 久草视频免费在线播放 | 天天做日日爱夜夜爽 | 黄色av网站在线观看免费 | 四虎8848免费高清在线观看 | 亚洲欧美日韩中文在线 | 久久免费片 | 九色琪琪久久综合网天天 | 婷婷色资源 | 天天色天天操综合 | 91精品一区二区三区蜜臀 | 中文字幕日韩免费视频 | 国产不卡一区二区视频 | 日韩视频一区二区在线观看 | 欧美精品久久久久 | 国产成人黄色网址 | 中文字幕第一页在线播放 | 亚洲国产精品999 | 久久黄色美女 | 国产99久久久国产精品免费看 | 欧美最猛性xxxxx免费 | 深爱婷婷网 | 精品国产一区二区三区噜噜噜 | 国产91学生| 国产手机视频在线 | 亚洲激情在线视频 | 亚洲成人资源 | 日本午夜在线亚洲.国产 | 成人网444ppp| 国产美女被啪进深处喷白浆视频 | 欧美日韩一级在线 | 成人免费观看视频大全 | 中文字幕欧美激情 | 播五月婷婷 | 天天插天天狠 | 日韩影片在线观看 | 91完整版在线观看 | 天天躁日日躁狠狠躁 | 五月婷婷中文网 | 黄在线免费观看 | 超碰在线人人艹 | av中文字幕网址 | 国产精品久久久久婷婷二区次 | 久久伊人免费视频 | 超碰97网站 | 97超碰人人澡 | 精品亚洲男同gayvideo网站 | 92精品国产成人观看免费 | 在线免费看片 | 欧美激情亚洲综合 | 91免费在线 | 亚洲精品在线观看网站 | 91麻豆精品国产自产 |