SetSearchFilterEx(VARIANT * pvarSearchFilter) Sets the cameras to be included or excluded from the search method.
Parameter: pvarSearchFilter Type: VARIANT *
Safearray of search camera list. The first byte is the number of cameras in the array. The size of the array is the number of cameras plus 1. Set the byte corresponding to the camera index to 1 for search and 0 for excluding in the search. For example, to search camera 1,2, and 5 for a 5 camera system. The array should look like.
Hmmm.. Hvis jeg ellers læser beskrivelsen rigtigt, så skal der kun sendes én variabel til funktionen. *-tegnet angiver vist bare, at den skal sendes som en ByRef type, og det er jo VBA's normale måde at sende parametre (hvis en funktion kræver, at en parameter sendes "by value", skal man explicit angive ByVal foran parameternavnet).
Så for mig at se, skal du kun sende dit array til dit COM objekt. Så jeg ville prøve med:
Har du prøvet at tildele arrayelementerne et tal i stedet for en streng? Jeg antager, at når du tildeler elementerne strenge, vil de indeholde adressen til strengen, hvilket, hvis COM objektet opfatter det som et tal, for element 0 vil pege "forbi" de definerede elementer i arrayet. Det kunne foranledige objektet til at returnere den angivne fejlmelding. Prøv:
Jeg er lidt forvirret mht. den Long der står i definitionen ud for element 0. Måske skal man tildele en "Long" værdi (en array af Variant typen kan jo indeholde informationer i alle de andre variabeltyper). Så måske skal det i virkeligheden være:
cameraFilter(0) = 9&
(hvor & tegnet indikerer, at værdien er at opfatte som en Long værdi)
Måske er det bare en fiks idé, men jeg bliver ved at kredse om den Long instruktion på element 0. Jeg tror det betyder, at elementet skal udfyldes med en værdi af long typen. Desværre så understøtter VBScript ikke den direkte tildeling af en long-værdi angivet som f.eks. arr(0)=1&, sådan som jeg skrev tidligere. Det kan man i VB og VBA, men altså ikke i VBScript. Når man bare skriver arr(0)=1, bliver det lagret som en integer (det kan man se, hvis man laver en "msgbox vartype(arr(0))", som skal udskrive værdien 3, for at det er lagret som en long. Men den skriver 2 i stedet - altså en integer.
Det fik mig en stund til at tvivle på, at det kunne lade sig gøre i VBScript, men det kan faktisk lade sig gøre. Det ser bare lidt mærkeligt ud, for man er nødt til at lave noget aritmetik med to værdier, som behøver long (altså er større end den højeste værdi der kan lagres i en integer). Hvis man tildeler værdien 9 kan man skrive:
altså simpelthen en streng med en række bytes, der indeholder informationerne.
Det er så godt nok ikke et array i VBScript forstand, men det er jo dybest set et array af bytes. Og beskrivelsen taler jo om bytes.
Men strenge bliver jo ikke bare lagret som en række af bytes, de bliver lagret som en adresse til strengen + længden af strengen, så det dit COM objekt får "overrakt" er derfor noget, den først skal finde selv (den reelle streng). COM objekter er ofte skrevet C API'er og kan ikke umiddelbart bruges af VB, VBA og VBScript, som bruger specielle variabel typer. Ofte kræver det en wrapper, altså en "overbygning". Står der noget i dokumentationen om, hvilke sprog den understøtter?
Hmmm... jeg tror jeg giver op så (definitivt). :-(
Jeg er bange for, at der ikke er mange nye som finder vej til dette "gamle" spørgsmål. Så hvis jeg var dig, ville jeg lukke spørgsmålet og oprette det igen i en ny "indpakning". Man må jo ikke oprette det samme spørgsmål flere gange!! Måske har du så held til at tiltrække en "superekspert" eller to, som kan hjælpe dig. Måske burde du også alvorligt overveje at skifte sprog. VBScript er jo ikke verdens mest oplagte til den slags.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.