[Delphi/COM+] Gestion des exceptions ...

Gestion des exceptions ... [Delphi/COM+] - Programmation

Marsh Posté le 19-09-2001 à 16:39:36    

Voala j'ai un compo activeX
J'ai dedans une gestion des exceptions assez detaillee qui marche bien
en fin non, elle marche po bien :/
 
A partir du moment ou j'instancie un compo COMTI (technologie micro$oft) je perds le detail de mes exceptions ...
 
Je m'explique :
avant :
   raise MonException.create;
===> je recupere MonException dans le prog appelant
 
apres COMTI
   raise MonException.create
===> je recuepere Exception:erreur inconnue
(ou un truc kom ca, je l'ai plus sous les yeux ... )
 
les exceptions sont tjs bien levee (heureusement :sweat: ) mais j'ai plus le detail :/
 
des idees ?


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 19-09-2001 à 16:39:36   

Reply

Marsh Posté le 19-09-2001 à 17:36:11    

Idee ?
Heu je sais po moi, change de boulot ?
Joue plus souvent a Quake III :)
 
Sinon bah nan, je vois po trop koi tu veux dire mon pOv gars !
C koi le COM TI ? Tu trouves ca ou ? balance, je materais des keu j'aurais le temps... Je me remets a donf dans les COM+ et DLL dans environ une a deux semaines :/
 
Suis hyper heureux :cry:
 
++


---------------
"Si vous avez perdu votre mot de passe : C bien fait Zavez ka pas etre bete" :)
Reply

Marsh Posté le 19-09-2001 à 17:39:18    

Je pense que c'est à cause d'une limitation de la gestion des exceptions de Delphi.  
Delphi ne gere que les exceptions qui dérivent de la classe Exception, sinon il renvois que c'est un exception inconnue. Or en C++ ( langage dans laquelle ton ActiveX à du être develloppé) on peut renvoyer tout type d'exception ( entier, chaine de caractère....).
 
Ca reste un supposition, mais c'est un problème que j'ai déja rencontré.

Reply

Marsh Posté le 19-09-2001 à 17:40:26    

pfffff ax' stp :lol:
 
bon alors poor les ignares ComTI est un solution cro$soft mermettant de genenerer des Com+ faisant le lien entre les appli win (appel du com) et les mainframes
Dans mon cas le ComTI a ete genenere a partir du code cobol(:sarcastic: ) d'une transaction sur IMS/MVS


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 19-09-2001 à 17:44:28    

le pb C ke mes exceptions ki marchent tres bien tout le long du process deraillent a partir du moment ou j'utilise le comti :??:
 
raise monException; <== ok
createcomobject(..le COMTI...)
raise monException  <== not ok
 
C lourd :/
 
sinon mon activeX est dvlp en Delphi et est utilise par une appli Delphi (test) ou des pages asp (prod)


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 19-09-2001 à 17:57:44    

Et pkoi tu utilises les exceptions, moi mes programmes functiunnent toujours tres bien... Jamais d'erreurs :lol:
 
Vala, mais en gros, je peux te dire keu C le COM TI ky fout la merde, je vois toujours po a koi ca te sert...
Normalement ta po besoin de ca, tu fais juste un appel a ton COM Object dans ton appli et pouf ca roule...
 
En fait, d'apres ce keu je comprends, le COM TI est en fait le lien entre le COM et l'appli, donc si tu coupes les ponts (blague !) tu les crees toi-meme...
 
Atta
 
 
(Scritch scritch) <- cherchage de code :D
 
Ouais donc, kan tu crees tes COM Objects, y te genere des xxxxx_TLB.Pas
Bah ca tu les inclues dans ton appli et tu fais une reference a la creation...
 
Genre ta un fichier test_TLB.pas
Dans ton appli, dans les units tu ajouts test_TLB
et pis apres tu crees ton instance et c marre...
 
Tu bosses ensuite dessus directement kom si tu faisais liaison avec le COM
 
Vala, /me se casse, ++


---------------
"Si vous avez perdu votre mot de passe : C bien fait Zavez ka pas etre bete" :)
Reply

Marsh Posté le 19-09-2001 à 18:05:58    

bon alors kom d'hab ils a rien compris le rosbeef :sarcastic:
 
sur le mainframe, il y a un pgr ki me fait un traitement et ke me retourne des trucs achement importants (genre c'est meme le but de l'appli ...)
le comti a partir du source du pgr genere un com+ qui va avoar une fonction qui lancera le pgr sur le mainframe
donc j'ai besoins du comti :sarcastic:
pis les exceptions ... je sais po komment vous pgrammez en engleterre mais moa je blinde mon code (surtout kan C poor poor un client comme le miens :sweat: )
 
sinon je le redis, C po le comti ki genere les exceptions !
C moa ki les lances


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 20-09-2001 à 10:24:21    

T'avais ka pa faire du Delphi :D
 
Nan franchement et honnetement, mon cher Evode, ... je n'ai strictement rien compris a ce keu tu m'as dit... Disons keu en gros je comprends po koi keu ca devient clair maintenant...
 
Atta...
 
OK, et pkoi tu utilises le COM TI pour creer ton COM +...
First of all, pkoi tu le crees po toi-meme ton object ? C pourtant po dur... Alors heu...
Second, le COM Ti, y ti genere ti un code kekpart ? si oui, tu farfouines le code et zou ca parti
 
LOL !!!! [:kasumi]


---------------
"Si vous avez perdu votre mot de passe : C bien fait Zavez ka pas etre bete" :)
Reply

Marsh Posté le 20-09-2001 à 11:07:19    

1) rester calme (ok)
2) exploser axelay a Q3 le soar sur le net (ok)
3) reexpliker a axelay (work in prodess)
4) rexploser axelay a Q3 (toDo)
 
Bon je reexplike
 
COMTI genere un com+ ke j'utilise dans mon com+ ke je developpe
...
 
bon C po grave, prenons le pb autrement :
j'ai besoins d'utiliser un com+ donne, mais des ke je l'instancie, je pers le detail de mes exceptions ...
 
si tu comprends tjs po ce k'est comti =>  http://www.microsoft.com/hiserver/techinfo/comti.asp


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 20-09-2001 à 13:32:54    

Si j'ai bien compris (sinon, il va falloir que tu appliques les points (1) et (3) pour moi ;) ), t'as des objets delphi de base ( TMachin=class(TObject) ) et apres t'as des wrappers autour de ces objets pour présenter tes interfaces via COM ?
 
le pb c'est que quand tu raise un exception dans ton TMachin, ca va utiliser la méthode SafeCallException du TObject qui renvoit tout le temps l'exception E_UNEXPECTED.
 
Pour pouvoir récuperer les erreurs via l'interface, il faut que tu raise des EOleSysError (dans ComObj) et que tu overrides la méthode SafeCallException de ton TMachin et y mettre par exemple
function TMachin.SafeCallException(ExceptObject: TObject;  ExceptAddr: Pointer): HResult;
begin
  Result := Comobj.HandleSafeCallException(ExceptObject, ExceptAddr, StringToGUID(CreateClassID),'', '';);
end;
 
(si t'as les sources de Delphi, regarde le contenu de ComObj, ca explique un peu comment ca marche)
 
Je suis sur que je suis pas clair du tout... faut dire que ca fait plus d'un an et j'ai pas de mémoire :(
Pour plus d'info, regarde sur groups.google.com, c'est la que j'avais trouvé la solution a l'époque...

 

[edtdd]--Message édité par JWhy--[/edtdd]


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 20-09-2001 à 13:32:54   

Reply

Marsh Posté le 20-09-2001 à 13:40:26    

interressant ...
 
ca rejoint un peu l'idee de seblamb.
 
Mais si on part du principe ke c'est parce k'il fo ke je raise des EOleSysError, pkoa ca marche correctement avant l'emploie du comti et pas apres :??:
 
je vais rechercher sur groups.google.com
merci :)

 

[edtdd]--Message édité par evode--[/edtdd]


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 20-09-2001 à 14:05:53    

j'ai trouve http://groups.google.com/groups?hl [...] 1.deja.com
 
c'est ce truc la ke t'avais vu ?
 
j'ai po tout tout compris (Do you Speak English ?)
En tout cas la gars il vraiment toute la chaine d'exception (baleze)


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 27-09-2001 à 11:40:59    

Bon alors on avance :
Le passage des Exception a des EOleException nous amene non plus un 'Erreur Irremediable' mais 'OLE Error 80040108' (dans le cas d'un eoleexception avec un code erreur 264)
De plus mon eoleexception a un message 'Mon message d'erreur'
Le but, je le rappelle est d'arriver a le recuperer ...
 
Bon deja, petit environnement de test :
-un ActiveX serveur tout con ki avec une methode Launch qui se contente d'instancier le COMTI et qui lance aussitot apres une EOleException
-une appli PipoApp toute con qui cree mon activeX et qui lance Launch
 
Le probleme semble plus sournois ...
a)Si mon activeX est enregistre dans une appli COM+ : ca merde a donf (cf plus haut)
b)Si mon activeX n'est pas enregstre dans une appli COM+ (seulement recense donc) : ca merde a donf MAIS legerement differemment
 
Je m'explike
-En debuggage de PipoApp, avec a), le lancement de Launch me genere directement l'exception generique 'Ole Error 80040108'
-En debuggage de PipoApp, avec b), le lancement de launch me raise mon exception 'Mon message d'erreur' !!!!
:bounce: :bounce: ca marche ??
ET BEN NON !!!!! :fou:
Parce k'une deuxieme exception succede aussitot a cette premiere, cette exception est l'habituelle :gun: 'Ole Error 80040108'
 
:fou: :fou:
 
Delphi est t'il a remettre en cause ?
=> on prog un activeX et une appli de test en VB => meme comportement (en plus vb ne nous montre pas la permiere exception en cas b) mais directement la 'mauvaise';)
 
Derniere phase de tests => test directement sur le serveur (COMTI etait appele en DCOM)
sans rentrer dans les details : CA MARCHE !!!!
:fou: mais CA VA PAS, il est Imperatif ke ca marche en DCOM !!!
 
je sais po, je sais plus ... ca me gonfle ...


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 27-09-2001 à 14:57:58    

Dans 'List of Extended MAPI Numeric Result Codes'
On trouve  
 MAPI_E_INVALID_OBJECT  -> 80040108  
 
Je sais pas si ça a un rapport avec ton applis.

Reply

Marsh Posté le 27-09-2001 à 15:06:50    

eu s'cuse, me suis mal exprime
le code erreur ke j'ai donne est un exemple, j'ai mis 80040108 poor un code erreur de 264 comme un pure exemple, bon ok j'ai merde, j'aurais du en donner un superieur a 512 (200 en hexa)
:jap:
Dans mes tests je donnais bien un code erreur libre (0200<x<ffff)
desole :jap:


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 27-09-2001 à 15:18:01    

Je connais le COM mais pas le COM+ donc je ne sais pas que c'est un 'activeX est enregistre dans une appli COM+'
Par contre vu que ça marche en local pas en reseau, es tu sur que la fonction de marshaling est activée. Parce que c'est un problème courant, un objet complexe pour voyager entre différent processus doit subir des modifications.

Reply

Marsh Posté le 27-09-2001 à 15:53:10    

je ne peux pas verifier :/ (c'est chez le client et la je suis ailleur :sarcastic: )
 
neanmoins, je ne sais pas si c'est du au marshalling :
mon com+ est local, seul le COMTI est distant
et ce sont les exceptions de mon com (locales donc) qui sont erronnees
Enfin kan je dis ke mon com est local, c'est provisoire, dans l'environement de recette il sera en utilisation distante :/
 
(sinon par appli com+, j'entends telle kon les gere par le gestionnaire de composant -win2K- ou on ajoute des compo a une 'application COM+', de la on parametre par exemple les identifications, les roles (droits), chaines de construction ...)


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 28-09-2001 à 12:24:56    

je viens d'avoar la raison du probleme ...
 
Les stations de dvlp ke nous avions etaient sous w2K, mais po avec le sp2 :/
 
Avec ca marche parfaitement :/
 
ou comment perdre dans les 3jours et s'arracher les cheveux a cause de ...
 
(le premier ki me dit : "ben t'avais k'a correctement installer ta machine"
ben a celui la je lui reponds : "je bosse sur la machine k'on me donne, elle est pas a moa, ni a ma boite, j'ai po le droit de faire koa ke ce soat dessus !"
 
neanmoins, C vraiment trop CON :fou: comme erreur
le sp2 corrige en fait (et entre autre) un probleme avec les DCOM ...)
 
Donc voala, le probleme est resolu


---------------
Hyndex - Meuaarf !! ReZo !!!
Reply

Marsh Posté le 28-09-2001 à 12:36:55    

hmmmmm, tu vois kan tu veux :clap:
 
:)
 
Mais le probleme est assez interessant et va certainement pouvoir servir a de pauvres gens comme moi :/
 
Bravo a tous :)


---------------
"Si vous avez perdu votre mot de passe : C bien fait Zavez ka pas etre bete" :)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed