2010-08-25 2 views
1

J'apprends en pratiquant. On m'a donné un fichier OCX qui, d'après ce qui m'a été donné, a été créé en utilisant VB6 et j'ai la tâche de créer une interface utilisateur pour tester toutes les fonctionnalités décrites dans un fichier de documentation mal écrit. En plus de cela, je ne suis pas très versé dans VBScript mais j'ai réussi à esquiver quelques balles tout en apprenant.Accéder à l'élément de collection VB6 à partir de VBScript incorporé au HTML

J'ai une méthode qui retourne un Collection et lorsque je tente d'y accéder à partir de VBScript Je ne suis en mesure d'interroger la Count mais lorsque je tente de faire job.Item(i) ou job(i) je reçois une erreur indiquant qu'il ne possède pas cette propriété ou méthode.

Quelqu'un peut-il me diriger dans la bonne direction pour pouvoir parcourir le contenu de cette collection?

Je devais le faire à partir de JavaScript mais comme certaines choses n'étaient pas si faciles, j'ai décidé que VBScript pourrait peut-être m'aider à combler les lacunes où JavaScript ne l'a pas coupé. Je peux accéder à toutes les propriétés de l'ActiveXObject à partir de JavaScript, mais les méthodes qui renvoient d'autres objets VB sont un peu plus obscures pour moi. J'ai essayé aJob.Item(iCount), aJob.Items(iCount) et aJob(iCount).

Mon code est:

For iCount = 1 To aJobs.Count 
    MsgBox("Num " & iCount) 
    MsgBox(aJobs.Item(iCount)) 
Next 

Merci.

+0

Qu'est-ce que c'est 1998? * (désolé ...) * – ChaosPandion

+0

Pourquoi les point-pointeurs hantent les threads VB6? (probablement aussi désolé) – Bob77

Répondre

1

Les gens créent souvent des classes de collection spécialisées et/ou fortement typées dans VB6. Cependant, ils ne le font pas toujours correctement, et ils créent parfois des implémentations de collection "partielles" qui n'ont pas de méthode Item() (ou ne parviennent pas à le marquer comme membre par défaut de la classe). Ils pourraient même avoir une méthode ou une propriété similaire, mais le nommer quelque chose de complètement différent.

Il est plus rare de renvoyer un objet Collection brut, mais cela peut être fait et, si tel est le cas, vous ne devriez pas avoir les problèmes que vous avez indiqués à partir de VBScript.

Je viens de créer un projet DLL nommé "HallLib" avec trois classes: Hallway, DoorKnobs et DoorKnob. La classe DoorKnobs est une collection d'objets DoorKnob. La classe Hallway a un objet DoorKnobs qu'il initialise avec un ensemble aléatoire d'objets DoorKnob avec des propriétés définies au hasard. Hallway.DoorKnobs() renvoie l'objet de collection DoorKnobs comme résultat.

Il fonctionne très bien dans ce script:

Option Explicit 

Dim Hallway, DoorKnobs, DoorKnob 

Set Hallway = CreateObject("HallLib.Hallway") 
Set DoorKnobs = Hallway.DoorKnobs() 

MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count) 

For Each DoorKnob In DoorKnobs 
    MsgBox "DoorKnob.Material = " & CStr(DoorKnob.Material) & vbNewLine _ 
     & "DoorKnob.Color = " & CStr(DoorKnob.Color) 
Next 

Mise à jour:

Ce script produit des résultats identiques:

Option Explicit 

Dim Hallway, DoorKnobs, KnobIndex 

Set Hallway = CreateObject("HallLib.Hallway") 
Set DoorKnobs = Hallway.DoorKnobs() 

MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count) 

For KnobIndex = 1 To DoorKnobs.Count 
    With DoorKnobs.Item(KnobIndex) 
     MsgBox "DoorKnob.Material = " & CStr(.Material) & vbNewLine _ 
      & "DoorKnob.Color = " & CStr(.Color) 
    End With 
Next 

tout comme:

Option Explicit 

Dim Hallway, DoorKnobs, KnobIndex 

Set Hallway = CreateObject("HallLib.Hallway") 
Set DoorKnobs = Hallway.DoorKnobs() 

MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count) 

For KnobIndex = 1 To DoorKnobs.Count 
    With DoorKnobs(KnobIndex) 
     MsgBox "DoorKnob.Material = " & CStr(.Material) & vbNewLine _ 
      & "DoorKnob.Color = " & CStr(.Color) 
    End With 
Next 

Je suppose donc que vous aurez besoin d'utiliser un navigateur de type bibliothèque comme OLEView pour regarder votre OCX pour voir les classes et les membres qu'il expose réellement.

Questions connexes