OVH Cloud OVH Cloud

Interop COM/.NET

7 réponses
Avatar
Matthieu STAELEN
Bonjour,
je dois faire appel à deux composants COM dans une Page ASP.NET.
Le fonctionnement est le suivant:
MonComLib.maClass a =
HttpContext.Current.Server.CreateObject("MA.Siganture") as
MonComLib.maClass;
// Cette ligne est OK l'object fonctionne...
// c'est ici que cela ce complique.
MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
MonDeuxiemeComLib.maSecondeClass;
// est la KO
en ASP sa marchais... (c'est peut-etre lier au type variant...)
Qq 1 a une idée?

Pour Info extrait de l'idl:
HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);

7 réponses

Avatar
Thomas Marencic [MS]
Bonjour,

peut-on avoir le détail de l'erreur?

Cordialement.
Thomas MARENCIC

"Matthieu STAELEN" wrote in message
news:
Bonjour,
je dois faire appel à deux composants COM dans une Page ASP.NET.
Le fonctionnement est le suivant:
MonComLib.maClass a > HttpContext.Current.Server.CreateObject("MA.Siganture") as
MonComLib.maClass;
// Cette ligne est OK l'object fonctionne...
// c'est ici que cela ce complique.
MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
MonDeuxiemeComLib.maSecondeClass;
// est la KO
en ASP sa marchais... (c'est peut-etre lier au type variant...)
Qq 1 a une idée?

Pour Info extrait de l'idl:
HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);






Avatar
Matthieu STAELEN
Message : Le cast spécifié n'est pas valide
COMPlusException : e0434f4d

vous voulez d'autre valeurs?

"Thomas Marencic [MS]" a écrit dans le
message de news: Ox8ci#
Bonjour,

peut-on avoir le détail de l'erreur?

Cordialement.
Thomas MARENCIC

"Matthieu STAELEN" wrote in message
news:
> Bonjour,
> je dois faire appel à deux composants COM dans une Page ASP.NET.
> Le fonctionnement est le suivant:
> MonComLib.maClass a > > HttpContext.Current.Server.CreateObject("MA.Siganture") as
> MonComLib.maClass;
> // Cette ligne est OK l'object fonctionne...
> // c'est ici que cela ce complique.
> MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
> MonDeuxiemeComLib.maSecondeClass;
> // est la KO
> en ASP sa marchais... (c'est peut-etre lier au type variant...)
> Qq 1 a une idée?
>
> Pour Info extrait de l'idl:
> HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);
>
>
>
>




Avatar
Frederic Melantois
Bonjour,

Si vous faîtes appel à des composants COM dans votre page ASP.NET, Vous
devez vous mettre en mode STA

directive de page : aspcompat=true

Plus de précisions ici :
http://fr.gotdotnet.com/quickstart/aspplus/doc/cominterop.aspx

n'hésitez pas à utiliser l'utilitaire tlbimp.exe, c'est très pratique :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cptools/html/cpgrftypelibraryimportertlbimpexe.asp

Frédéric Mélantois

"Matthieu STAELEN" a écrit dans le message de
news:
Bonjour,
je dois faire appel à deux composants COM dans une Page ASP.NET.
Le fonctionnement est le suivant:
MonComLib.maClass a > HttpContext.Current.Server.CreateObject("MA.Siganture") as
MonComLib.maClass;
// Cette ligne est OK l'object fonctionne...
// c'est ici que cela ce complique.
MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
MonDeuxiemeComLib.maSecondeClass;
// est la KO
en ASP sa marchais... (c'est peut-etre lier au type variant...)
Qq 1 a une idée?

Pour Info extrait de l'idl:
HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);






Avatar
Matthieu STAELEN
Oui, je l'avais deja fait... et pour la generation de l'assemblie j'utilise
VS.NET

"Frederic Melantois" a écrit dans le message de
news: cmqi3h$rrm$
Bonjour,

Si vous faîtes appel à des composants COM dans votre page ASP.NET, Vous
devez vous mettre en mode STA

directive de page : aspcompat=true

Plus de précisions ici :
http://fr.gotdotnet.com/quickstart/aspplus/doc/cominterop.aspx

n'hésitez pas à utiliser l'utilitaire tlbimp.exe, c'est très pratique :



http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cptools/html/cpgrftypelibraryimportertlbimpexe.asp

Frédéric Mélantois

"Matthieu STAELEN" a écrit dans le message de
news:
> Bonjour,
> je dois faire appel à deux composants COM dans une Page ASP.NET.
> Le fonctionnement est le suivant:
> MonComLib.maClass a > > HttpContext.Current.Server.CreateObject("MA.Siganture") as
> MonComLib.maClass;
> // Cette ligne est OK l'object fonctionne...
> // c'est ici que cela ce complique.
> MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
> MonDeuxiemeComLib.maSecondeClass;
> // est la KO
> en ASP sa marchais... (c'est peut-etre lier au type variant...)
> Qq 1 a une idée?
>
> Pour Info extrait de l'idl:
> HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);
>
>
>
>




Avatar
Eric Vernié [MS]
Bonjour Mathieu,

Va faire un tour du coté de la classe
System.Runtime.InteropServices.Marshal
tu trouveras sans doute ton bonheur pour indiquer à ASP.NET que tu utilises
l'interface IDispatch

exemple : essai un truc du style
CreeObjet(byval progid as string) As <MarshalAs(UnmanagedType.IDispatch)>
object

A+

Eric Vernié
Microsoft France


"Matthieu STAELEN" a écrit dans le message de
news:
Bonjour,
je dois faire appel à deux composants COM dans une Page ASP.NET.
Le fonctionnement est le suivant:
MonComLib.maClass a > HttpContext.Current.Server.CreateObject("MA.Siganture") as
MonComLib.maClass;
// Cette ligne est OK l'object fonctionne...
// c'est ici que cela ce complique.
MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
MonDeuxiemeComLib.maSecondeClass;
// est la KO
en ASP sa marchais... (c'est peut-etre lier au type variant...)
Qq 1 a une idée?

Pour Info extrait de l'idl:
HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);






Avatar
Matthieu STAELEN
Merci pour ton aide, .... mais

[MarshalAs(UnmanagedType.IUnknown)] public MonDeuxiemeComLib.maSecondeClass
b;
private void function()
{
MonComLib.maClass a;
a = HttpContext.Current.Server.CreateObject("JSWrap.JSWrap.1")
as MonComLib.maClass ;
b= a.CreateObject("VST") as MonDeuxiemeComLib.maSecondeClass ;
// b à une valeur indefinie...
}

J'ai oublié qq'chose?

"Eric Vernié [MS]" a écrit dans le message de
news:
Bonjour Mathieu,

Va faire un tour du coté de la classe
System.Runtime.InteropServices.Marshal
tu trouveras sans doute ton bonheur pour indiquer à ASP.NET que tu


utilises
l'interface IDispatch

exemple : essai un truc du style
CreeObjet(byval progid as string) As <MarshalAs(UnmanagedType.IDispatch)>
object

A+

Eric Vernié
Microsoft France


"Matthieu STAELEN" a écrit dans le message de
news:
> Bonjour,
> je dois faire appel à deux composants COM dans une Page ASP.NET.
> Le fonctionnement est le suivant:
> MonComLib.maClass a > > HttpContext.Current.Server.CreateObject("MA.Siganture") as
> MonComLib.maClass;
> // Cette ligne est OK l'object fonctionne...
> // c'est ici que cela ce complique.
> MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
> MonDeuxiemeComLib.maSecondeClass;
> // est la KO
> en ASP sa marchais... (c'est peut-etre lier au type variant...)
> Qq 1 a une idée?
>
> Pour Info extrait de l'idl:
> HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);
>
>
>
>




Avatar
Matthieu STAELEN
C'est OK! grâce au MarshalAs... l'exemple ci dessous fonctionne qd on même
la bonne interface....
Merci à tous.

"Matthieu STAELEN" a écrit dans le message de
news:
Merci pour ton aide, .... mais

[MarshalAs(UnmanagedType.IUnknown)] public


MonDeuxiemeComLib.maSecondeClass
b;
private void function()
{
MonComLib.maClass a;
a = HttpContext.Current.Server.CreateObject("JSWrap.JSWrap.1")
as MonComLib.maClass ;
b= a.CreateObject("VST") as MonDeuxiemeComLib.maSecondeClass ;
// b à une valeur indefinie...
}

J'ai oublié qq'chose?

"Eric Vernié [MS]" a écrit dans le message de
news:
> Bonjour Mathieu,
>
> Va faire un tour du coté de la classe
> System.Runtime.InteropServices.Marshal
> tu trouveras sans doute ton bonheur pour indiquer à ASP.NET que tu
utilises
> l'interface IDispatch
>
> exemple : essai un truc du style
> CreeObjet(byval progid as string) As


<MarshalAs(UnmanagedType.IDispatch)>
> object
>
> A+
>
> Eric Vernié
> Microsoft France
>
>
> "Matthieu STAELEN" a écrit dans le message


de
> news:
> > Bonjour,
> > je dois faire appel à deux composants COM dans une Page ASP.NET.
> > Le fonctionnement est le suivant:
> > MonComLib.maClass a > > > HttpContext.Current.Server.CreateObject("MA.Siganture") as
> > MonComLib.maClass;
> > // Cette ligne est OK l'object fonctionne...
> > // c'est ici que cela ce complique.
> > MonDeuxiemeComLib.maSecondeClass b = a.CreeObject("TEST") as
> > MonDeuxiemeComLib.maSecondeClass;
> > // est la KO
> > en ASP sa marchais... (c'est peut-etre lier au type variant...)
> > Qq 1 a une idée?
> >
> > Pour Info extrait de l'idl:
> > HRESULT CreeObject([in] BSTR monNom, [out, retval] LPDISPATCH *rObj);
> >
> >
> >
> >
>
>