diff --git a/dlls/ole32/bindctx.c b/dlls/ole32/bindctx.c
index 6eeee55db3be5339594c5c003f616565420c7c23..ad445ffeb535f38246d8c45698494639fef81780 100644
--- a/dlls/ole32/bindctx.c
+++ b/dlls/ole32/bindctx.c
@@ -556,3 +556,16 @@ HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC * ppbc)
 
     return hr;
 }
+
+HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID riid, LPVOID * ppvResult)
+{
+    HRESULT res;
+    IBindCtx * pbc;
+
+    TRACE("(%p, %lx, %s, %p)\n", pmk, grfOpt, debugstr_guid(riid), ppvResult);
+
+    res = CreateBindCtx(grfOpt, &pbc);
+    if (SUCCEEDED(res))
+        res = IMoniker_BindToObject(pmk, pbc, NULL, riid, ppvResult);
+    return res;
+}
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index fcb77145138820fca908441220b8b2f08173a340..137803f6b729ddb2d2b7c6f77178fce6467bbd8c 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -1,4 +1,4 @@
-  1 stub BindMoniker                # stdcall (ptr long ptr ptr) return 0,ERR_NOTIMPLEMENTED
+  1 stdcall BindMoniker(ptr long ptr ptr) BindMoniker
   2 stdcall CLSIDFromProgID(wstr ptr) CLSIDFromProgID
   3 stdcall CLSIDFromString(wstr ptr) CLSIDFromString
   4 stdcall CoBuildVersion() CoBuildVersion