C#, COM et ASP dans un bateau

Bonjour,

j’ai du passer rapidement par dessus les concepts d’ASP il fut un temps, et il me gave de devoir racheter un livre sur ASP, à l’époque d’ASP.NET.

Voilà donc mon problème, espérant une réponse simple, à un problème relativement simple.

Une de mes librairies .NET (en C#) est exposée COM.
Elle a été déployée et enregistrée sur une machine Windows Server 2003 qui a un IIS6 qui tourne, et une vieille appli “usine à gaz” ASP en VBScript.

J’arrive (avec succès) à manipuler mon objet COM (.NET) depuis ASP.
SAUF que… certaines méthodes de certaines classes de mon composant sont surchargées, et ASP n’en veut pas !

[quote]Erreur d’exécution Microsoft VBScript erreur '800a01c2’
Nombre d’arguments ou affectation de propriété incorrects: ‘pObj.AddLine’[/quote]

Voici le TLB de mon exposition COM :

[quote][
  uuid(1612D5C2-B8EC-4CC9-87AC-AD18A842B166),
  version(1.0),
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, PMLInterop.ICommande)

]
dispinterface ICommande {
    properties:
    methods:
        [id(0x60020000), propget]
        BSTR Officine();
        [id(0x60020000), propput]
        void Officine([in] BSTR rhs);
        [id(0x60020002), propget]
        BSTR Action();
        [id(0x60020002), propput]
        void Action([in] BSTR rhs);
        [id(0x60020004), propget]
        BSTR Usage();
        [id(0x60020004), propput]
        void Usage([in] BSTR rhs);
        [id(0x60020006), propget]
        BSTR LastError();
        [id(0x60020007)]
        VARIANT_BOOL Send();
        [id(0x60020008)]
        void Close();
        [id(0x60020009), propget]
        BSTR Reference();
        [id(0x60020009), propput]
        void Reference([in] BSTR rhs);
        [id(0x6002000b)]
        void AddLine(
                        [in] BSTR codeproduit,
                        [in] short quantite);
        [id(0x6002000c),
          custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, AddLine)]
        void AddLine_2(
                        [in] BSTR typecode,
                        [in] BSTR codeproduit,
                        [in] short quantite);
};[/quote]

Le plus intéressant étant :

[quote]        [id(0x6002000b)]
        void AddLine(
                        [in] BSTR codeproduit,
                        [in] short quantite);
        [id(0x6002000c),
          custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, AddLine)]
        void AddLine_2(
                        [in] BSTR typecode,
                        [in] BSTR codeproduit,
                        [in] short quantite);[/quote]

Voilà donc mon soucis: malgré le TLB correct, ASP ne veut pas utiliser la surcharge “AddLine”.
Chose étonnante, en appelant “AddLine_2” ça fonctionne…

Je pense pas que ASP/VBScript soit en cause, puisqu’il sait utiliser des composants COM comportant des méthodes surchargées sans problème (ADODB.Command par exemple comporte des méthodes surchargés si ma mémoire est bonne).

Une solution ?

Ca me dit quelque chose ce genre de limitation, et j’ai trouvé quelques liens où il est question de [quote]“Note that method overloading isn’t possible in COM because each method on an interface must have a unique name.”[/quote].

Quant à te garantir la véracité de ces dires… Je fouille encore un peu, mais honnêtement ce genre de limitation ne m’étonnerai pas (par contre je ne sais que dire sur la surcharge des méthodes de Command, ca mérite vérification).

Ah, en fait, il semblerait que COM supporte les paramètres optionnels, mais pas la surcharge de méthodes… (ce qui explique le coup de ADODB.Command).

Et comme c# ne supporte que l’inverse, on est coincés…

Je suis tombé sur un chapitre extrait d’un bouquin qui semble parler ce ce problème

Merci bien, j’ai ma réponse.
La simplicité voudrait donc que j’enlève toutes mes surcharges… :stuck_out_tongue: