Avatar billede kennethv Nybegynder
31. august 2009 - 12:04 Der er 2 kommentarer og
1 løsning

CoInitialize has not been called

Jeg har i lang tid kørt med et program uden problemer, men nu melder den fejl når jeg skal til at køre det.

Fejl:
CoInitialize has not been called

Fejlen opstår i denne:
procedure TMainForm.ThreadMessage(var aMsg: TMessage);
var
  m, s: integer;
begin
  // Paranteser for en sikkerheds skyld. Multiplicér er stærkere end div og mod
  m := aMsg.WParam div (SecsPerMin * MSecsPerSec);
  s := (aMsg.WParam mod (SecsPerMin * MSecsPerSec)) div MSecsPerSec;
//  lStatus.Caption := format('Næste opdatering om %d:%0.2d',[m,s]);

  pbStatus.Min := 0;
  pbStatus.Max := aMsg.LParam;

  pbStatus.Position := aMsg.LParam - aMsg.WParam;
  Application.ProcessMessages; <------------- LIGE HER FÅR JEG FEJLEN.
end;
Avatar billede Slettet bruger
31. august 2009 - 13:10 #1
Jeg tror ikke på at det har kørt i lang tid uden problemer.
Du har ændret programmet og nu virker det ikke mere.
Rigtigt?

Fejlen "CoInitialize has not been called" betyder lige præcis det den siger. Du har ikke kaldt CoInitialize.
Den fejl optræder typisk i sekundære tråde.
Din ThreadMessage procedure lyder som noget der bliver kaldt fra en sekundær tråd. Er det rigtigt?
Avatar billede hrc Mester
31. august 2009 - 14:16 #2
Læste et sted, at det åbenbart er nødvendigt i trådens execute-metode. Følgende skulle altså gøre det:

procedure TMyThread.Execute;
begin
  CoInitializeEx(nil); // Alt. CoInitializeEx(0,COINIT_MULTITHREADED);
  try
    while not terminated do
    begin
      ..
    end;
  finally
    CoUnInitialize;
  end;
end;
Avatar billede Slettet bruger
31. august 2009 - 16:57 #3
Præcis hrc.

Men han kalder så åbenbart TMainForm.ThreadMessage fra en sek. tråd hvor han kalder Application.ProcessMessages og det er bare SÅ forkert at gøre i en sek. tråd.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester