diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index aa99164..d317e2f 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -205,13 +205,13 @@
 }
 
     static char *
-null_libintl_bindtextdomain(const char *domainname, const char *dirname)
+null_libintl_bindtextdomain(const char * /* domainname */, const char * /* dirname */)
 {
     return NULL;
 }
 
     static char *
-null_libintl_textdomain(const char* domainname)
+null_libintl_textdomain(const char*  /* domainname */)
 {
     return NULL;
 }
@@ -308,7 +308,7 @@
 // DllMain
 //---------------------------------------------------------------------------
 extern "C" int APIENTRY
-DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID  /* lpReserved */)
 {
     switch (dwReason)
     {
@@ -438,7 +438,7 @@
 }
 
 
-STDMETHODIMP CShellExtClassFactory::LockServer(BOOL fLock)
+STDMETHODIMP CShellExtClassFactory::LockServer(BOOL  /* fLock */)
 {
     return NOERROR;
 }
@@ -520,9 +520,9 @@
 //		It could be a context menu or a property sheet.
 //
 
-STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
+STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST  /* pIDFolder */,
 				   LPDATAOBJECT pDataObj,
-				   HKEY hRegKey)
+				   HKEY  /* hRegKey */)
 {
     // Initialize can be called more than once
     if (m_pDataObj)
@@ -562,8 +562,8 @@
 STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
 					 UINT indexMenu,
 					 UINT idCmdFirst,
-					 UINT idCmdLast,
-					 UINT uFlags)
+					 UINT  /* idCmdLast */,
+					 UINT  /* uFlags */)
 {
     UINT idCmd = idCmdFirst;
 
@@ -718,11 +718,11 @@
     return hr;
 }
 
-STDMETHODIMP CShellExt::PushToWindow(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd,
+STDMETHODIMP CShellExt::PushToWindow(HWND  /* hParent */,
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */,
 				   int idHWnd)
 {
     HWND hWnd = m_hWnd[idHWnd];
@@ -740,9 +740,9 @@
     return NOERROR;
 }
 
-STDMETHODIMP CShellExt::GetCommandString(UINT_PTR idCmd,
+STDMETHODIMP CShellExt::GetCommandString(UINT_PTR  /* idCmd */,
 					 UINT uFlags,
-					 UINT FAR *reserved,
+					 UINT FAR * /* reserved */,
 					 LPSTR pszName,
 					 UINT cchMax)
 {
@@ -841,10 +841,10 @@
 #endif
 
 STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd)
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */)
 {
     char m_szFileUserClickedOn[BUFSIZE];
     char cmdStr[BUFSIZE];
@@ -911,10 +911,10 @@
 
 
 STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd,
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */,
 				   int useDiff)
 {
     char	m_szFileUserClickedOn[BUFSIZE];
