Gestion des exceptions ... [Delphi/COM+] - Programmation
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
++
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é.
Marsh Posté le 19-09-2001 à 17:40:26
pfffff ax' stp
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
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)
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
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
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, ++
Marsh Posté le 19-09-2001 à 18:05:58
bon alors kom d'hab ils a rien compris le rosbeef
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
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 )
sinon je le redis, C po le comti ki genere les exceptions !
C moa ki les lances
Marsh Posté le 20-09-2001 à 10:24:21
T'avais ka pa faire du Delphi
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 !!!!
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
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]
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]
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)
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' !!!!
ca marche ??
ET BEN NON !!!!!
Parce k'une deuxieme exception succede aussitot a cette premiere, cette exception est l'habituelle 'Ole Error 80040108'
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 !!!!
mais CA VA PAS, il est Imperatif ke ca marche en DCOM !!!
je sais po, je sais plus ... ca me gonfle ...
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.
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)
Dans mes tests je donnais bien un code erreur libre (0200<x<ffff)
desole
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.
Marsh Posté le 27-09-2001 à 15:53:10
je ne peux pas verifier (c'est chez le client et la je suis ailleur )
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 ...)
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 comme erreur
le sp2 corrige en fait (et entre autre) un probleme avec les DCOM ...)
Donc voala, le probleme est resolu
Marsh Posté le 28-09-2001 à 12:36:55
hmmmmm, tu vois kan tu veux
Mais le probleme est assez interessant et va certainement pouvoir servir a de pauvres gens comme moi
Bravo a tous
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 ) mais j'ai plus le detail
des idees ?
---------------
Hyndex - Meuaarf !! ReZo !!!