Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLE и WORD 
:(
    Опции темы
vinter
Дата 3.12.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: нет
Всего: 56



здравствуйте, есть COM объект с помощью которого работаю в своем приложении с вордом, т.е в моем окне открывается ворд, я пишу что-нибудь в открывшийся документ, все хорошо работает с 2003 офисом, но с 2007 поисходят чудеса smile У некоторых людей работает, у некоторых нет. При этом нет никаких ошибок. От каких утсановленных компонентов это может зависеть? и как это проверить?
На всякий случай выкладываю код, как я работаю с Вордом:
Код

BOOL CSite::CreateStorage()
{
    HOST_TRY( StgCreateDocfile( 0, STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
        | STGM_CREATE| STGM_DELETEONRELEASE, 0, &m_spGIStorage ) );

    DWORD dwMode = STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE;
    HOST_TRY( m_spGIStorage->CreateStorage( m_StorageName, dwMode, 0, 0, &m_spIStorage ) );

    dwMode = STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE;
    HRESULT hr = m_spIStorage->CreateStream( OLESTR( "\003DocObjInfo" ), dwMode, 0, 0, &m_spIStream );
    if( FAILED( hr ) )
    {
        HOST_TRY( ::CreateStreamOnHGlobal( 0, TRUE, &m_spIStream ) );
    }

    return TRUE;
}


Код

BOOL CSite::Activate( LONG iVerb )
{
    IOleClientSite* pClientSite = static_cast< IOleClientSite* > ( this );
    CRect rc( 0, 0, 500, 500 );
//    GetClientRect( &rc );
    HOST_TRY( m_spIOleObject->DoVerb( iVerb, 0, pClientSite, 0, *this, &rc ) );
    return TRUE;
}


Код

BOOL CSite::CreateDocObj( const ATL::CString& filename )
{
    HRESULT hr;

    if( !CreateStorage() )
        return FALSE;

    LPUNKNOWN pObj;
    hr = ::OleCreateFromFile( CLSID_NULL, filename, IID_IOleObject, OLERENDER_NONE, 0, 0, m_spIStorage, ( void** )&pObj );
    if( FAILED( hr ) )
    {
        DestroyStorage();
        return FALSE;
    }
    if( !Initialize( pObj ) )
    {
    }

    return TRUE;
}


Код

BOOL CSite::Initialize( LPUNKNOWN pObj )
{
    IOleClientSite* pClientSite = static_cast< IOleClientSite* > ( this );
    IOleInPlaceSite* pInPlaceSite = static_cast< IOleInPlaceSite* > ( this );

    m_spIOleObject = pObj;
    if( m_spIOleObject == 0 )
    {
        return FALSE;
    }

    HOST_TRY( m_spIOleObject->SetClientSite( pClientSite ) );
    ::OleRun( m_spIOleObject );

    return TRUE;
}


Код

BOOL CSite::CreateWordApp( const ATL::CString& filename )
{
    BOOL res;
    res = CreateDocObj( filename );
    if( res )
    {
        res = Activate( OLEIVERB_SHOW );
    }
    InitFunc();
    return res;
}


и непосредственно сохранение
Код

BOOL CSite::SaveDocObj( const ATL::CString& filename )
{
    CHECK_RES( m_spIOleObject != 0 );
    ATL::CComQIPtr< IPersistFile > spIPersistFile;
    spIPersistFile = m_spIOleObject;
    CHECK_RES( spIPersistFile != 0 );
    spIPersistFile->Save( filename, TRUE );
    spIPersistFile->SaveCompleted( filename );
    
    return TRUE;
}


Третий день бьюсь с этой мистикой, подскажите если кто знает smile 



--------------------
Мой блог
PM MAIL WWW   Вверх
jonie
Дата 4.12.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



чет сложно как-то.. ворд же дает готовый activeX, зачем играться с олей ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
vinter
Дата 4.12.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: нет
Всего: 56



jonie, буду очень благодарен если скажешь другой способ smile


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1062 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.