Bonjour,
Afin de proposer aux utilisateurs un bouton Arr�ter l'impression, j'ai cr�� un Thread, le programme principal est une DLL.
Ce thread lance une proc�dure (fonctionnant parfaitement dans le contexte du programme principal) qui plante : Indice de liste hors limite(2). Cette erreur ne semble pas concern� le thread puisqu'il continue � fonctionner jusqu'au bout sans erreur.

La proc�dure utilise une liste de signets Word (j'ai initialis� cette liste avec ThreadList), ouvre Word et acc�de � la base de donn�es via BDE pour renseigner les signets d'un mod�le de document.

Voici le code :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Initialisations:
  TList *signetsWord=new TList();
  threadsignetsWord=new TThreadList();
  threadsignetsWord->Add(signetsWord);
  signetsWord=threadsignetsWord->LockList();

  TfImprime *fImprime=new TfImprime(Screen->Forms[0]);
  fImprime->Threaded=true;
  fImprime->typeModele=typeModele;
  fImprime->statut_bonlabo=statut_bonlabo;
  fImprime->statut_dialyse=statut_dialyse;
  fImprime->ShowModal();

Lancement du thread � partir de la fen�tre fImprime :
void __fastcall TfImprime::btAnnuleClick(TObject *Sender)
{
   Suspended=true;
   btAnnule->Enabled=false;
   if (Threaded)
      ThreadImp->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::Termine(TObject *Sender) {
   delete ThreadImp;
   Close();
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::Timer1Timer(TObject *Sender)
{
   Timer1->Enabled=false;
   if (Threaded) {
      ThreadImp=new TThreadExe(true);
      ThreadImp->typeModele=typeModele;
      ThreadImp->statut_bonlabo=statut_bonlabo;
      ThreadImp->statut_dialyse=statut_dialyse;
      ThreadImp->Priority=tpNormal;
      ThreadImp->FreeOnTerminate=false;
      ThreadImp->OnTerminate=Termine;
      ThreadImp->Resume();
   }
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::FormShow(TObject *Sender)
{
   Timer1->Enabled=true; // oui le timer n'est pas utile....
}
//---------------------------------------------------------------------------

Voici la classe TThread :

//---------------------------------------------------------------------------
__fastcall TThreadExe::TThreadExe (bool CreateSuspended):TThread(CreateSuspended){
}
//---------------------------------------------------------------------------
void __fastcall TThreadExe::Execute(){
   CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
   Lance();
   CoUninitialize();
}
//---------------------------------------------------------------------------
void __fastcall TThreadExe::Lance(void) {
   TSignet::Word->printBoucle(typeModele,statut_bonlabo,statut_dialyse);
}
//---------------------------------------------------------------------------

Le code de recherche des signets :

  for(int i=0; i<signetsWord->Count; i++){
    unSignet=(TSignet *)signetsWord->Items[i];
    ....<suite du code>...
tous les try catch que j'ai pu mettre sont sans effet m�me au niveau de l'exe.
Quelqu'un aurait-il une id�e d'o� vient l'erreur ?
Merci d'avance.