J'ai un assembly .NET 3.5 qui est en cours d'exécution en tant que composant serveur COM +, et je souhaite appeler une méthode de cette classe à partir de VBScript (un Page ASP classique).Erreur "Type Mismatch" lors de l'accès à un tableau renvoyé par COM + (VBScript)
Ceci est le contour de la méthode;
public bool FillArray(ref string[] arrayToFill)
{
...
}
Mon VBScript est le suivant;
Dim myComponent, result, myArray
Set myComponent = Server.CreateObject("MyComponentProgID")
result = myComponent.FillArray(myArray)
Response.Write("IsArray = " & IsArray(myArray) & "<br/>")
Response.Write("UBound = " & UBound(myArray) & "<br/>")
Response.Write("TypeName = " & TypeName(myArray) & "<br/>")
Response.Write("Element 1 = " & myArray(1))
Cela provoque l'erreur suivante (déclenchée par la ligne où j'appelle l'appel à FillArray);
Type d'erreur: exécution Microsoft VBScript (0x800A0005) d'appel de procédure non valide ou argument: 'FillArray'
Firing up OLEView, l'IDL ressemble à ceci;
HRESULT FillArray(
[in, out] SAFEARRAY(BSTR)* arrayToFill,
[out, retval] VARIANT_BOOL* pRetVal);
J'ai essayé de changer ma signature de la méthode à ce qui suit;
public bool FillArray(ref object[] arrayToFill)
Qui a abouti à l'IDL suivant;
HRESULT FillArray(
[in, out] SAFEARRAY(VARIANT)* arrayToFill,
[out, retval] VARIANT_BOOL* pRetVal);
Mais toujours la même "Appel de procédure non valide ou argument" FillArray "" erreur.
Enfin, j'ai essayé de changer ma signature de méthode pour simplement ceci;
public bool FillArray(ref object arrayToFill)
Qui a donné le IDL suivant;
HRESULT FillArray(
[in, out] VARIANT* arrayToFill,
[out, retval] VARIANT_BOOL* pRetVal);
Cela donne une nouvelle erreur maintenant;
exécution Microsoft VBScript (0x800A000D) Type de non-concordance
Cette erreur ne se décocha sur la dernière ligne maintenant, ce qui est quand je tente d'accéder à un élément du tableau. Si je commente la dernière ligne, alors j'obtiens la sortie suivante;
IsArray = True
UBound = 39
TypeName = Chaîne()
Apparemment donc, la variante est reconnue comme un tableau, et du type correct. En outre, le nombre correct d'éléments est renvoyé par UBound, mais je ne peux accéder à aucun des éléments pour une raison inconnue.
Est-ce que quelqu'un a une idée de ce qui pourrait être à l'origine de cela?J'ai moi-même fait quelques recherches et suis tombé sur le lien suivant;
http://connect.microsoft.com/VisualStudio/feedback/details/331632/marshaler-bug-with-vbscript-arrays
Je ne suis pas certain à 100% que c'est exactement le même problème, que je ne suis pas déclarais mes tableaux de la même manière dans mon code VBScript. J'espère sincèrement que ce n'est pas le même problème, car je n'ai aucune possibilité de passer à .NET 4.0.
Merci pour votre mise à jour! Je pense que cela m'aurait pris du temps pour comprendre. J'ai posté ma variante VB.Net ci-dessous. –
Glad it helps! –
Grande réponse - à votre santé! –