diff --git a/src/if_ole.h b/src/if_ole.h
new file mode 100644
index 0000000..30191b8
--- /dev/null
+++ b/src/if_ole.h
@@ -0,0 +1,289 @@
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+/* File created by MIDL compiler version 3.01.75 */
+/* at Wed Jun 06 18:20:37 2001
+ */
+/* Compiler settings for .\if_ole.idl:
+    Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
+    error checks: none
+*/
+//@@MIDL_FILE_HEADING(  )
+#include "rpc.h"
+#include "rpcndr.h"
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __if_ole_h__
+#define __if_ole_h__
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IVim_FWD_DEFINED__
+#define __IVim_FWD_DEFINED__
+typedef interface IVim IVim;
+#endif	/* __IVim_FWD_DEFINED__ */
+
+
+#ifndef __Vim_FWD_DEFINED__
+#define __Vim_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Vim Vim;
+#else
+typedef struct Vim Vim;
+#endif /* __cplusplus */
+
+#endif	/* __Vim_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+
+void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+
+#ifndef __IVim_INTERFACE_DEFINED__
+#define __IVim_INTERFACE_DEFINED__
+
+/****************************************
+ * Generated header for interface: IVim
+ * at Wed Jun 06 18:20:37 2001
+ * using MIDL 3.01.75
+ ****************************************/
+/* [oleautomation][dual][unique][helpstring][uuid][object] */
+
+
+
+EXTERN_C const IID IID_IVim;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    interface DECLSPEC_UUID("0F0BFAE2-4C90-11d1-82D7-0004AC368519")
+    IVim : public IDispatch
+    {
+    public:
+	virtual HRESULT STDMETHODCALLTYPE SendKeys(
+	    /* [in] */ BSTR keys) = 0;
+
+	virtual HRESULT STDMETHODCALLTYPE Eval(
+	    /* [in] */ BSTR expr,
+	    /* [retval][out] */ BSTR __RPC_FAR *result) = 0;
+
+	virtual HRESULT STDMETHODCALLTYPE SetForeground( void) = 0;
+
+	virtual HRESULT STDMETHODCALLTYPE GetHwnd(
+	    /* [retval][out] */ UINT __RPC_FAR *result) = 0;
+
+    };
+
+#else	/* C style interface */
+
+    typedef struct IVimVtbl
+    {
+	BEGIN_INTERFACE
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ REFIID riid,
+	    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+	ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+	    IVim __RPC_FAR * This);
+
+	ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+	    IVim __RPC_FAR * This);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+	    IVim __RPC_FAR * This,
+	    /* [out] */ UINT __RPC_FAR *pctinfo);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ UINT iTInfo,
+	    /* [in] */ LCID lcid,
+	    /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ REFIID riid,
+	    /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+	    /* [in] */ UINT cNames,
+	    /* [in] */ LCID lcid,
+	    /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+	/* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ DISPID dispIdMember,
+	    /* [in] */ REFIID riid,
+	    /* [in] */ LCID lcid,
+	    /* [in] */ WORD wFlags,
+	    /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+	    /* [out] */ VARIANT __RPC_FAR *pVarResult,
+	    /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+	    /* [out] */ UINT __RPC_FAR *puArgErr);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SendKeys )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ BSTR keys);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Eval )(
+	    IVim __RPC_FAR * This,
+	    /* [in] */ BSTR expr,
+	    /* [retval][out] */ BSTR __RPC_FAR *result);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetForeground )(
+	    IVim __RPC_FAR * This);
+
+	HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetHwnd )(
+	    IVim __RPC_FAR * This,
+	    /* [retval][out] */ UINT __RPC_FAR *result);
+
+	END_INTERFACE
+    } IVimVtbl;
+
+    interface IVim
+    {
+	CONST_VTBL struct IVimVtbl __RPC_FAR *lpVtbl;
+    };
+
+#ifdef COBJMACROS
+
+
+#define IVim_QueryInterface(This,riid,ppvObject)	\
+    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVim_AddRef(This)	\
+    (This)->lpVtbl -> AddRef(This)
+
+#define IVim_Release(This)	\
+    (This)->lpVtbl -> Release(This)
+
+
+#define IVim_GetTypeInfoCount(This,pctinfo)	\
+    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVim_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\
+    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVim_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
+    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVim_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
+    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVim_SendKeys(This,keys)	\
+    (This)->lpVtbl -> SendKeys(This,keys)
+
+#define IVim_Eval(This,expr,result)	\
+    (This)->lpVtbl -> Eval(This,expr,result)
+
+#define IVim_SetForeground(This)	\
+    (This)->lpVtbl -> SetForeground(This)
+
+#define IVim_GetHwnd(This,result)	\
+    (This)->lpVtbl -> GetHwnd(This,result)
+
+#endif /* COBJMACROS */
+
+
+#endif	/* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IVim_SendKeys_Proxy(
+    IVim __RPC_FAR * This,
+    /* [in] */ BSTR keys);
+
+
+void __RPC_STUB IVim_SendKeys_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IVim_Eval_Proxy(
+    IVim __RPC_FAR * This,
+    /* [in] */ BSTR expr,
+    /* [retval][out] */ BSTR __RPC_FAR *result);
+
+
+void __RPC_STUB IVim_Eval_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IVim_SetForeground_Proxy(
+    IVim __RPC_FAR * This);
+
+
+void __RPC_STUB IVim_SetForeground_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IVim_GetHwnd_Proxy(
+    IVim __RPC_FAR * This,
+    /* [retval][out] */ UINT __RPC_FAR *result);
+
+
+void __RPC_STUB IVim_GetHwnd_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif	/* __IVim_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __Vim_LIBRARY_DEFINED__
+#define __Vim_LIBRARY_DEFINED__
+
+/****************************************
+ * Generated header for library: Vim
+ * at Wed Jun 06 18:20:37 2001
+ * using MIDL 3.01.75
+ ****************************************/
+/* [version][helpstring][uuid] */
+
+
+
+EXTERN_C const IID LIBID_Vim;
+
+#ifdef __cplusplus
+EXTERN_C const CLSID CLSID_Vim;
+
+class DECLSPEC_UUID("0F0BFAE1-4C90-11d1-82D7-0004AC368519")
+Vim;
+#endif
+#endif /* __Vim_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long		  __RPC_USER  BSTR_UserSize(	 unsigned long __RPC_FAR *, unsigned long	     , BSTR __RPC_FAR * );
+unsigned char __RPC_FAR * __RPC_USER  BSTR_UserMarshal(  unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, BSTR __RPC_FAR * );
+unsigned char __RPC_FAR * __RPC_USER  BSTR_UserUnmarshal(unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, BSTR __RPC_FAR * );
+void			  __RPC_USER  BSTR_UserFree(	 unsigned long __RPC_FAR *, BSTR __RPC_FAR * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
