Dear Ryan I tried but I do not know if I understand what should I do. void CMyAddin::StartProcOut() { IStream* M_stream; LPVOID* izh = NULL; CComPtr oSel; CComQIPtr spApp(m_pParentApp); ATLASSERT(spApp); _bstr_t Some_Text(OLESTR("HELLO?")); hr = CoInitialize(NULL); //return S_OK hr = CoMarshalInterThreadInterfaceInStream(IID_IDTExtensibility2,this,&M_stream); //return S_OK while (end_thread_out == false){ if (WaitForSingleObject(h_end_th_out,INFINITE) != WAIT_FAILED){ HRESULT hr = spApp->get_Selection(&oSel); oSel->TypeText(Some_Text); } } hr = CoGetInterfaceAndReleaseStream(M_stream,IID_IDTExtensibility2,izh); CoUninitialize(); } The CLSID_MyAddin is uniq identifier static const GUID IID_IDTExtensibility2 = {0xB65AD801L,0xABAF,0x11D0,{0xBB,0x8B,0x00,0xA0,0xC9,0x0F,0x27,0x44}}; class CMyAddin : public IDTExtensibility2 Is this correct? I still get: Unhandled exception in WINWORD.EXE 0xC0000005: Access Violation CMyAddin is created by class CMyAddinCF : public IClassFactory Tomaz Rotovnik