Christian Gmeiner : mlang: Implement DllCanUnloadNow.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Mar 4 11:09:59 CST 2006
Module: wine
Branch: refs/heads/master
Commit: ad4af1264fff1c949578a5fdd65a2e7bfa6544e1
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ad4af1264fff1c949578a5fdd65a2e7bfa6544e1
Author: Christian Gmeiner <christian.gmeiner at 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)
More information about the wine-cvs
mailing list