Module: wine Branch: refs/heads/master Commit: ad4af1264fff1c949578a5fdd65a2e7bfa6544e1 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ad4af1264fff1c949578a5fd...
Author: Christian Gmeiner christian.gmeiner@students.fh-vorarlberg.ac.at Date: Fri Mar 3 10:04:08 2006 +0100
mlang: Implement DllCanUnloadNow.
---
dlls/mlang/mlang.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index f2f759c..e339b02 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -453,6 +453,21 @@ static const struct mlang_data
static void fill_cp_info(const struct mlang_data *ml_data, UINT index, MIMECPINFO *mime_cp_info);
+static LONG dll_count; + +/* + * Dll lifetime tracking declaration + */ +static void LockModule(void) +{ + InterlockedIncrement(&dll_count); +} + +static void UnlockModule(void) +{ + InterlockedDecrement(&dll_count); +} + BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) { switch(fdwReason) { @@ -735,8 +750,11 @@ static HRESULT WINAPI MLANGCF_CreateInst
static HRESULT WINAPI MLANGCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { - IClassFactoryImpl *This = (IClassFactoryImpl *)iface; - FIXME("(%p)->(%d),stub!\n",This,dolock); + if (dolock) + LockModule(); + else + UnlockModule(); + return S_OK; }
@@ -2281,6 +2299,9 @@ static HRESULT MultiLanguage_create(IUnk mlang->ref = 1; *ppObj = (LPVOID) mlang; TRACE("returning %p\n", mlang); + + LockModule(); + return S_OK; }
@@ -2288,8 +2309,7 @@ static HRESULT MultiLanguage_create(IUnk
HRESULT WINAPI DllCanUnloadNow(void) { - FIXME("\n"); - return S_FALSE; + return dll_count == 0 ? S_OK : S_FALSE; }
HRESULT WINAPI GetGlobalFontLinkObject(void)