Results 1 to 12 of 12

Thread: Word document lezen met Lazarus, vermoedelijk OLE probleem

  1. #1

    Word document lezen met Lazarus, vermoedelijk OLE probleem

    Hi Lazarus gebruikers,

    Ik tracht de inhoud van een word document te lezen, maar volgende voorbeeldcode crasht bij het uitvoeren van 'CreateOleOject':
    Code:
    interface
    
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      Variants, ComObj;  
    
    // declaraties wegelaten voor de duidelijkheid
    
    implementation
    procedure TForm1.Button1Click(Sender: TObject);
    const
      ServerName = 'Word.Application';
    var
      Server     : OLEVariant;
    begin
      if Assigned(InitProc) then
        TProcedure(InitProc);
    
      try
        Server := CreateOleObject(ServerName);
      except
        WriteLn('Unable to start Word.');
        Exit;
      end;  
      ...
    ...
    end;
    Ik krijg zelfs de melding 'Unable to start Word' niet te zien.
    Bij de crash zie ik het volgende:
    ... raised Exception Class 'EOleSysError' with message: 'Onherstelbare fout' en 'at address 10018B71F'.

    Iemand enig idee? Moet in iets extra installeren? In Delphi 7 en Delphi 10.2 werkt het wel (met weglaten van de 'IniProc' zaken).

    Alvast bedankt!
    Vriendelijke groeten,
    Dany

  2. #2
    Wat doet die InitProc daar ???
    Die is toch alleen voor Console programma's o.i.d.?

    http://lazarus-ccr.sourceforge.net/d.../initproc.html

    In ieder geval behoort die absoluut niet uitgevoerd te worden bij een buttonclick.
    Misschien is ie al nil en doet ie niets maar in een GUI hoort ie daar niet thuis.

    De rest van je code werkt gewoon.
    Last edited by rvk; 13-Jul-17 at 17:11.

  3. #3
    Quote Originally Posted by rvk View Post
    Wat doet die InitProc daar ???
    Die is toch alleen voor Console programma's o.i.d.?

    http://lazarus-ccr.sourceforge.net/d.../initproc.html

    In ieder geval behoort die absoluut niet uitgevoerd te worden bij een buttonclick.
    Misschien is ie al nil en doet ie niets maar in een GUI hoort ie daar niet thuis.

    De rest van je code werkt gewoon.
    Hoi Rvk, bedankt voor je snelle antwoord. Ik ben een echte Lazarus nieuweling, dus wist ik niet dat de intproc stuff bij een console applicatie hoorde...

    Ik dacht al getest te hebben met die statements uitgecommentaard, maar blijkbaar heb ik iets stoms gedaan, want als ik nu die statements weglaat werkt het wel!

    Trouwens: als ik die statements laat staan werkt het ook nog! Nutteloos te zeggen dat ik er weinig meer van begrijp. Misschien zit die windows update er voor iets tussen die deze namiddag gebeurd is?


    In elk geval nogmaals bedankt!

    p.s. zijn er veel Lazarus gebruikers bij NLDelphi?
    Vriendelijke groeten,
    Dany

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Het zijn er een aantal en het groeit nog steeds. Echter alleen bij hobbyisten, want die kunnen de licentie van Delphi niet meer betalen. Je betaalt tegenwoordig niet alleen de licentie, maar ook het abonnement. Alles bij elkaar een hoop geld.

    Ja, er is een starter editie, maar die is kaal vergeleken de huidige lazarus versie.
    Delphi is great. Lazarus is more powerfull

  5. #5
    Toch iets raars aan de hand bij mij. Hetzelfde probleem als eerst is daar weer. Gisteravond werkte het nochtans goed...

    Iemand enig idee?

    Alvast nogmaals bedankt!
    Vriendelijke groeten,
    Dany

  6. #6
    Computer opnieuw opstarten.

  7. #7
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik heb overigens gewoon een XE10 licentie, maar gebruik lazarus eigenlijk voor alles behalve de hoofd app.

    Veel makkelijker overal op te installeren, en installaties (met geinstalleerde componenten) zijn in te pakken en op een andere computer te gebruiken.

    Voor de hoofdapp telt vooral debug gemak in delphi.

  8. #8
    Quote Originally Posted by rvk View Post
    Computer opnieuw opstarten.
    Uiteindelijk is het in orde gekomen met mijn probleem: ik heb een paar retries ingebouwd. Ik zie dat soms 1 of 2 retries nodig zijn bij 'CreateOleObject' vooraleer het lukt.
    Het doel van het programma was de inhoud van een word file (of .wps file) in te lezen en die inhoud via het clipboard binnen te halen. Ook bij gebruik van het clipboard heb ik een paar delays moeten inbouwen omdat anders soms het clipboard leeg bleek te zijn...

    Hier de volledige code:
    Code:
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      Variants, ComObj, ClipBrd, Windows;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    const
      ServerName: ansistring = 'Word.Application';
    var
      Server: olevariant;
      w: WideString;
      Item_, CharsCount: integer;
      ClipBoard: TClipBoard;
      Res: string;
      Cnt: byte;
    begin
    
      Cnt := 0;
      Label1.Caption := IntToStr(Cnt);
    
      try
        Server := CreateOleObject(ServerName);
      except
        try
          inc(Cnt);
          Label1.Caption := IntToStr(Cnt);
    
          Sleep(300);
          Server := CreateOleObject(ServerName);
        except
          try
            inc(Cnt);
            Label1.Caption := IntToStr(Cnt);
    
            Sleep(300);
            Server := CreateOleObject(ServerName);
          except
            inc(Cnt);
            Label1.Caption := IntToStr(Cnt);
    
            ShowMessage('Unable to start Word.');
            Exit;
          end;
        end;
      end;
    
    
      {Open existing document}//Substitute your path and doc
      w := 'C:\Lazarus Projects\First test\factuur 011.wps';
      Server.Documents.Open(w);
      //OLE uses BSTR (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx). Only widestring is compatible with BSTR in FPC, so conversion is needed for nonlatin chars.
      Server.Visible := False;  {Make Word invisible}
    
      Item_ := 1;
      CharsCount := Server.Documents.item(Item_).Characters.Count;
      //get the number of chars to select
      Server.Selection.SetRange(0, CharsCount); //make the selection
      ClipBoard := TClipboard.Create;
      sleep(10);
      Server.Selection.Copy; //copy to the clipboard
      sleep(10);
      Res := Clipboard.AsText; //get the text from the clipboard
      Clipboard.Free;
    
      Server.Quit;
    
      Res := StringReplace(Res, #9, '    ', [rfReplaceAll]);
      ShowMessage(Res);
    
    end;
    Idereen bedankt voor het meedenken!
    Vriendelijke groeten,
    Dany

  9. #9
    Quote Originally Posted by Dany View Post
    Uiteindelijk is het in orde gekomen met mijn probleem: ik heb een paar retries ingebouwd. Ik zie dat soms 1 of 2 retries nodig zijn bij 'CreateOleObject' vooraleer het lukt.
    Mooi als het natuurlijk lukt

    Maar, Oi, wat vind ik dat het lelijke oplossing
    (naja, niet de code zelf maar het feit dat je het verschillende keren moet proberen)

    Helaas zit er niets anders op als je het oorspronkelijke probleem niet kunt vinden.

  10. #10
    Joost JvZijl's Avatar
    Join Date
    Jul 2014
    Location
    Vijfhuizen
    Posts
    173
    Quote Originally Posted by marcov View Post
    Ik heb overigens gewoon een XE10 licentie, maar gebruik lazarus eigenlijk voor alles behalve de hoofd app.

    Veel makkelijker overal op te installeren, en installaties (met geinstalleerde componenten) zijn in te pakken en op een andere computer te gebruiken.

    Voor de hoofdapp telt vooral debug gemak in delphi.
    Alleen wordt het onder OSX steeds lastiger.
    Lazarus gaat op zich prima maar ik heb steeds meer ruzie met de debugger onder OSX.
    Ik werk met El Capitan en heb geprobeerd te upgraden naar Sierra maar kreeg ik de debugger niet aan de praat (zal aan mij liggen).
    Nu weer alles geïnstalleerd onder El Capitan en ik heb de debugger ook weer werkend.
    Windows 10 gaf geen probleem.
    Lazarus 1.6/fpc 3.0 fpsrc 3.0 on osx 10.11.5

  11. #11
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik heb OS X opgegeven als hopeloos nadat carbon dood verklaard werd. Maar goed, we zijn inmiddels 12 jaar verder, en carbon werkt nog steeds.

    Het beste voor OS X is het forum en de mac-pascal lijst op de voet volgen, want er zijn soms trucjes. Ik volg het niet, want ik heb alleen PPC macs die ik zelden boot.

  12. #12
    Joost JvZijl's Avatar
    Join Date
    Jul 2014
    Location
    Vijfhuizen
    Posts
    173
    Quote Originally Posted by marcov View Post
    Ik heb OS X opgegeven als hopeloos nadat carbon dood verklaard werd. Maar goed, we zijn inmiddels 12 jaar verder, en carbon werkt nog steeds.

    Het beste voor OS X is het forum en de mac-pascal lijst op de voet volgen, want er zijn soms trucjes..
    Heb niet zoveel keus Marco, hood computer is een iMac, virtueel een Windows 10 draaien maar vind OS X net iets lekker werken.
    Tips en trucks werken niet altijd heb ik ervaren.
    Maar tot nu toe kan ik er mee leven
    Lazarus 1.6/fpc 3.0 fpsrc 3.0 on osx 10.11.5

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •