Christian Gmeiner : mlang: Implement DllCanUnloadNow.
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(a)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)
participants (1)
-
Alexandre Julliard