diff --git a/dlls/msacm/msacm.spec b/dlls/msacm/msacm.spec index 7cbd40d860..1ac566bed7 100644 --- a/dlls/msacm/msacm.spec +++ b/dlls/msacm/msacm.spec @@ -41,3 +41,4 @@ owner msacm32 201 stub ACMCLOSECONVERSION 202 stub ACMCONVERT 203 stub ACMCHOOSEFORMAT +255 pascal DllEntryPoint(long word word word long word) MSACM_DllEntryPoint diff --git a/dlls/msacm/msacm_main.c b/dlls/msacm/msacm_main.c index 8c860ab274..ab493f5d89 100644 --- a/dlls/msacm/msacm_main.c +++ b/dlls/msacm/msacm_main.c @@ -14,14 +14,43 @@ DEFAULT_DEBUG_CHANNEL(msacm); +/************************************************************************** + * MSACM_LibMain [EntryPoint] + * + * MSACM DLL entry point + * + */ +BOOL WINAPI MSACM_DllEntryPoint(DWORD fdwReason, HINSTANCE16 hinstDLL, WORD ds, + WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) +{ + static HANDLE hndl; + + TRACE("0x%x 0x%lx\n", hinstDLL, fdwReason); + + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + if (!hndl && !(hndl = LoadLibraryA("MSACM32.DLL"))) { + ERR("Could not load sibling MsAcm32.dll\n"); + return FALSE; + } + break; + case DLL_PROCESS_DETACH: + FreeLibrary(hndl); + hndl = 0; + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + } + return TRUE; +} + /*********************************************************************** * acmGetVersion (MSACM.7) */ -DWORD WINAPI acmGetVersion16() +DWORD WINAPI acmGetVersion16(void) { - FIXME("(): stub\n"); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; /* FIXME */ + return acmGetVersion(); } /*********************************************************************** @@ -31,9 +60,9 @@ DWORD WINAPI acmGetVersion16() MMRESULT16 WINAPI acmMetrics16( HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric) { - FIXME("(0x%04x, %d, %p): stub\n", hao, uMetric, pMetric); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return MMSYSERR_ERROR; + FIXME("(0x%04x, %d, %p): semi-stub\n", hao, uMetric, pMetric); + + return acmMetrics(hao, uMetric, pMetric); } /*********************************************************************** diff --git a/documentation/samples/config b/documentation/samples/config index b939f30b88..d7e9c7741d 100644 --- a/documentation/samples/config +++ b/documentation/samples/config @@ -101,6 +101,8 @@ WINE REGISTRY Version 2 "mciavi.drv" = "native, builtin" "mcianim.drv" = "native, builtin" "msacm.drv" = "builtin, native" +"msacm" = "builtin, native" +"msacm32" = "builtin, native" "midimap.drv" = "builtin, native" "wnaspi32" = "builtin" "icmp" = "builtin" diff --git a/loader/loadorder.c b/loader/loadorder.c index 9e1a1f6219..5d5e0fcecb 100644 --- a/loader/loadorder.c +++ b/loader/loadorder.c @@ -60,6 +60,7 @@ static struct tagDllOverride { {"mciwave.drv", "builtin,native"}, {"mciavi.drv,mcianim.drv", "native,builtin"}, {"msacm.drv,midimap.drv", "builtin,native"}, + {"msacm,msacm32", "builtin,native"}, {"opengl32", "builtin,native"}, /* we have to use libglideXx.so instead of glideXx.dll ... */ {"glide2x,glide3x", "so,native"}, @@ -86,6 +87,7 @@ static const struct tagDllPair { { "lzexpand", "lz32" }, { "mmsystem", "winmm" }, { "msvideo", "msvfw32" }, + { "msacm", "msacm32" }, { "winsock", "wsock32" }, { NULL, NULL } };