Конференция "Corba" » Компоненты – серверы COM [D7, WinXP]
 
  • Максим (22.04.08 10:44) [0]
    Добрый день, Мастера!
    Помогите разобраться в некотором моменте…
    Используя компоненты – WordApplication и WordDocument, приложение открывает нужные файлы. Однако, если закрываешь Word, то следующее прочтение по базе нужного файла вызывает ошибку класса EOleException - “ Сервер RPC недоступен ”!
    Что интересно, с компонентами ExcelApplication и ExcelWorkbook все проходит гладко, и нет подобных ошибок!
    Кто встречался с подобным, напишите, пожайлуста
    Заранее благодарю, Максим
  • Сергей М. © (22.04.08 10:53) [1]

    > с компонентами ExcelApplication и ExcelWorkbook все проходит
    > гладко, и нет подобных ошибок


    И это плохо.

    А в чем собссно проблема ?
  • Максим (22.04.08 12:24) [2]
    Проблема в том, что после принудительного закрытия Word больше не открываются Word документы в моем приложении! Что посоветуете?
  • Сергей М. © (22.04.08 12:47) [3]

    > Что посоветуете?


    Посоветую понять, что документы открывает не твое приложение, а чужое.
    И если оно будучи закрытым более не существует, то и документы открывать некому.
  • Максим (22.04.08 13:54) [4]
    Спасибо, это все понятно....
    Логика ясна.
    Но, в Excel то работает, хоть закрывай редактор, хоть не закрывай,приложение в любом случае "откроет" *.xls.
    Все-таки, может я чего-то не знаю про Word? Как это обойти?
    Вот, собственно на конкретном примере...

    procedure Otkr_f(Im_f:string);
    var
     FileExt: string[4];
     Dial:OleVariant;
    begin
        //просмотр     //    puth:=ImageForm.FileListBox1.Filename;

       puth:=trim(Im_f);
       FileExt := (ExtractFileExt(Im_f));  //AnsiUpperCase
       if (FileExt = '.doc')or(FileExt = '.DOC') then
         begin
         F_glav.WordApplication1.Connect;
         F_glav.WordApplication1.Documents.Add(puth,EmptyParam,EmptyParam,EmptyParam); //EmptyParam
         Connect ;
         F_glav.WordDocument1.ConnectTo(F_glav.WordApplication1.ActiveDocument);

         F_glav.WordApplication1.Visible:=true;

        end;
       if (FileExt = '.xls')or(FileExt = '.XLS') then
         begin
         F_glav.ExcelApplication1.Workbooks.Add(puth,0);
         F_glav.ExcelWorkbook1.ConnectTo(F_glav.ExcelApplication1.ActiveWorkbook);
         F_glav.ExcelApplication1.Visible[0]:=true;

         end;

    end;

    И еще - F_glav.WordDocument1.ConnectTo(F_glav.WordApplication1.ActiveDocument);

    не активирует последний открытый файл, а добавляет  к списку открытых!

    Что скажете?
  • Сергей М. © (22.04.08 14:18) [5]
    А собссно какая строчка кода приводит к исключению ?
    И какая, как напротив ожидалось, не приводит ?
  • Максим (22.04.08 14:32) [6]
    Вот строка :
    F_glav.WordApplication1.Documents.Add(puth,EmptyParam,EmptyParam,EmptyParam)

    после второго запуска Word выдает исключение, причем EmptyParam этом принимает значение Error(-2147352572)
  • Сергей М. © (22.04.08 15:32) [7]

    > после второго запуска


    В этой строке нет никакого запуска.
    А если ты ручками Ворд второй раз запускаешь, перед тем как выполнить эту строчку, то ССЗБ)


    > EmptyParam этом принимает значение Error(-2147352572)
    >


    Это как это ?

    EmptyParam - это входной параметр !
  • Максим (22.04.08 16:05) [8]
    Пробую другой вариант!
    Пусть по старинке,зато работает, как надо!
    Сколько не запускай редактор, нет никаких срывов. Вот!

    try
            V := CreateOleObject('Word.Basic');
            V.AppShow;  //делаем окно редактора видимым
            V.FileNew(DataM.Q_uchetPuth_dop.AsString);
            F_prosm.OleContainer1.CreateLinkToFile //дополн.форма!(DataM.Q_uchetPuth_dop.AsString,false);

          except
                    On EOleSysError do begin
                          Application.MessageBox('На компьютере нет выполняющегося в данный момент Word',
                          'Приложение будет закрыто',MB_OK+MB_ICONEXCLAMATION);
                          Application.Terminate;
                                end;
          end;
  • Сергей М. © (22.04.08 16:10) [9]
    Ну и зачем эта проктология, если и у Ворда и у Ёхеля как у серверов автоматизации есть событие OnQuit ?
 
Конференция "Corba" » Компоненты – серверы COM [D7, WinXP]
Есть новые Нет новых   [134430   +3][b:0][p:0.001]