Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ActiveX et Internet Explorer ?

4 réponses
Avatar
nicolas.hilaire
Bonjour à tous,

j'ai un problème avec un composant que j'ai développé avec Visual C++
6.0. Le composant fonctionne très bien lorsque je l'utilise avec VB6.
Là où il commence à poser problème, c'est avec Internet Explorer,
lorsque je l'utilise dans une page html. J'ai l'impression quelques
fois que le composant ne passe pas dans le constructeur ou alors qu'il
charge un composant sans l'initialiser à partir du cache.

j'ai géré un compteur d'instance.

Quand j'essaie de deggubber avec le debbuger de Visual C++, tout
marche comme il faut (peut-etre que le debbugger s'occupe de vider la
mémoire ou force le passage dans le constructeur (pas d'histoire de
cache dans ce cas là))

Quand j'utilise le meme activeX (compilé en debug) mais sans passer
par le debugger, là, ca ne marche plus correctement.

J'ai essayé de placer des MessageBox dans le constructeur pour tracer
(notamment le compteur d'instance), mais le simple fait de mettre une
messagebox fait que tout va bien en runtime, par contre, cette ligne
en commentaire, ca ne remarche plus correctement (messagebox a un
pouvoir mystique ???)

Je ne sais plus trop quoi faire, me manque-t-il des connaissances sur
la gestion des activex par internet explorer ?

Merci par avance de votre aide.


Nicolas H.

4 réponses

Avatar
Patrick Philippot
Nicolas Hilaire wrote:
j'ai un problème avec un composant que j'ai développé avec Visual C++
6.0. Le composant fonctionne très bien lorsque je l'utilise avec VB6.
Là où il commence à poser problème, c'est avec Internet Explorer,
lorsque je l'utilise dans une page html. J'ai l'impression quelques
fois que le composant ne passe pas dans le constructeur ou alors qu'il
charge un composant sans l'initialiser à partir du cache.



Il y a donc un bug quelque part... Quand vous dîtes que vous l'utilisez
dans IE, ça veut dire quoi exactement? Sur la même machine que la
machine de développement? (sinon, la machine en question a-t-elle les
DLLs MFC de debug?) En chargeant une page HTML séparée? En lançant IE
depuis VC++ et en chargeant la page en question?

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Avatar
nicolas.hilaire
Tout d'abord , merci de votre attention à mon problème.

je suis sur un poste de développement (donc j'ai toutes les dlls qu'il
me faut), et j'utilise donc mon activeX en l'instanciant dans une page
HTML avec les balises <OBJECT>.

Pour etre encore plus précis, c'est lorsque je veux instancier
plusieurs objets dans la meme page ; je gere donc un instance unique
de données partagées. Dans une form VB tout est ok (preuve que ca
marche).

Les effets dans IE sont ainsi :

- page IE lancée simplement ==> marche pas (comportement aléatoire)
- page IE lancée à partir du debbugger de VC++ ==> marche tres bien
- page IE lancée simplement, mais en rajoutant des messagebox pour un
débug "à la main" ==> marche très bien aussi

ce que je cherche en fait, c'est vers quoi orienter mes recherches ?
est-ce un problème de cache IE ? est-ce qu'il ne sait pas liberer
correctement ou instancier correctement les objets ? pourquoi les
messagebox ont-elles un effet bénéfique sur mon activeX ? ou peut-etre
une autre solution ???


Merci de votre aide


Nicolas H.



"Patrick Philippot" wrote in message news:<caccev$2at2$...
Nicolas Hilaire wrote:
> j'ai un problème avec un composant que j'ai développé avec Visual C++
> 6.0. Le composant fonctionne très bien lorsque je l'utilise avec VB6.
> Là où il commence à poser problème, c'est avec Internet Explorer,
> lorsque je l'utilise dans une page html. J'ai l'impression quelques
> fois que le composant ne passe pas dans le constructeur ou alors qu'il
> charge un composant sans l'initialiser à partir du cache.

Il y a donc un bug quelque part... Quand vous dîtes que vous l'utilisez
dans IE, ça veut dire quoi exactement? Sur la même machine que la
machine de développement? (sinon, la machine en question a-t-elle les
DLLs MFC de debug?) En chargeant une page HTML séparée? En lançant IE
depuis VC++ et en chargeant la page en question?


Avatar
Patrick Philippot
Nicolas Hilaire wrote:

Pour etre encore plus précis, c'est lorsque je veux
instancier plusieurs objets dans la meme page ;



C'est effectivement une info qui change tout.

je gere donc un instance unique de données partagées.



Pouvez vous détailler? Je ne comprends pas bien ce que cela signifie.

ce que je cherche en fait, c'est vers quoi orienter mes recherches ?
est-ce un problème de cache IE ? est-ce qu'il ne sait pas liberer
correctement ou instancier correctement les objets ? pourquoi les
messagebox ont-elles un effet bénéfique sur mon activeX ? ou peut-etre
une autre solution ???



La réponse est quasiment dans la question :-)
Si le fait d'activer une message box à l'initialisation supprime le
problème, ceci semble indiquer un problème de concurrence ou de
réentrance. Le fait d'afficher la MessageBox change le timing de
chargement. Il y a probablement dans votre code un accès simultané à une
ressource partagée entre les différentes instances que vous créez sur la
page.

N'oubliez pas que le chargement des objets est asynchrone. Si tous vos
contrôles accèdent à une ressource partagée pendant leur initialisation
(est-ce que c'est ce que votre phrase "je gere donc un instance unique
de données partagées" signifie?) et que ces accès ne sont pas
synchronisés, il y a effectivement des chances pour que ça se passe mal.

En passant, cela veut que tout code de scripting dans votre page doit
attendre le chargement complet de la page. Voir

Événement onload
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onload.asp

Propriété readyState
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readystate_2.asp

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Avatar
nicolas.hilaire
Merci de votre aide.

j'ai rajouté un laps de temps entre les créations des ActiveX et il ne
semble plus y avoir de problèmes. Il doit s'agir comme vous l'avez dit
d'un problème d'accès concurrent.

Je vais regarder de ce coté là et vous remercie grandement pour cette
piste judicieuse à explorer.

Bien cordialement


Nicolas H.





"Patrick Philippot" wrote in message news:<cajoqg$2rlu$...
Nicolas Hilaire wrote:

>Pour etre encore plus précis, c'est lorsque je veux
>instancier plusieurs objets dans la meme page ;

C'est effectivement une info qui change tout.

> je gere donc un instance unique de données partagées.

Pouvez vous détailler? Je ne comprends pas bien ce que cela signifie.

> ce que je cherche en fait, c'est vers quoi orienter mes recherches ?
> est-ce un problème de cache IE ? est-ce qu'il ne sait pas liberer
> correctement ou instancier correctement les objets ? pourquoi les
> messagebox ont-elles un effet bénéfique sur mon activeX ? ou peut-etre
> une autre solution ???

La réponse est quasiment dans la question :-)
Si le fait d'activer une message box à l'initialisation supprime le
problème, ceci semble indiquer un problème de concurrence ou de
réentrance. Le fait d'afficher la MessageBox change le timing de
chargement. Il y a probablement dans votre code un accès simultané à une
ressource partagée entre les différentes instances que vous créez sur la
page.

N'oubliez pas que le chargement des objets est asynchrone. Si tous vos
contrôles accèdent à une ressource partagée pendant leur initialisation
(est-ce que c'est ce que votre phrase "je gere donc un instance unique
de données partagées" signifie?) et que ces accès ne sont pas
synchronisés, il y a effectivement des chances pour que ça se passe mal.

En passant, cela veut que tout code de scripting dans votre page doit
attendre le chargement complet de la page. Voir

Événement onload
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onload.asp

Propriété readyState
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readystate_2.asp