Wo in den VB6 / VBA-Projektreferenzen kommen Array (), LBound () und UBound () von ..?

8

Wo in den VB6 / VBA-Projektreferenzen kommen Array (), LBound () und UBound () von ..? Wenn ich Code eintippe, erscheinen sie nicht in der Autocomplete-Liste (Strg + Leerzeichen), sie werden nicht automatisch vervollständigt, und sie müssen vollständig ausgetickt werden, bevor der Texteditor sie erkennt. Und nur wenn eine linke Klammer eingegeben wird, erscheint ToolTipText mit der Befehlssyntax. Außerdem werden sie nirgends im Objekt-Explorer angezeigt.

Hier ist wahrscheinlich ein Grundkonzept im Spiel, das mir nicht bewusst ist. Und ich frage mich, welche anderen Befehle / Anweisungen / Schlüsselwörter auf die gleiche Weise versteckt sind ..? Gibt es irgendwo eine Liste? Ich habe nach Informationen gegoogelt, aber nichts gefunden, wahrscheinlich weil ich nicht weiß, wonach ich suche und die falschen Suchbegriffe benutze.

Ich stelle diese Fragen, weil ich die Angewohnheit habe, vielen VB6-eingebauten Funktionen wie folgt voranzustellen: VBA.Left (), VBA.Len, VBA.Instr () und so weiter. Aber ich kann nicht herausfinden, welche Referenz Prefeix mit Array (), LBound () und UBound () zu verwenden, oder vielleicht sind sie so einfach für VB6, dass sie nicht haben.

Ich mache dieses Präfix, weil ich vor Jahren an einem großen Projekt gearbeitet habe und es Funktionen gab, die ich mit demselben Namen in verschiedenen Referenzbibliotheken verwenden wollte. Ich war ein Neuling und es dauerte eine Weile, bis ich es herausgefunden hatte, und es verursachte enorme Probleme, da die Funktionen NICHT so funktionierten, wie ich dachte, sie sollten es tun. Damals entwickelte ich die Präfix-Gewohnheit, nachdem ich es herausgefunden hatte. Es ist einfach einfacher und stellt immer sicher, dass die erwarteten Funktionen verwendet werden.

    
spinjector 12.01.2017, 20:28
quelle

3 Antworten

6

Der Grund, warum sie nicht als IntelliSense-Optionen angezeigt werden (und auch deshalb, weil sie nicht im Objektbrowser angezeigt werden) ist, dass sie nicht in der VBE7.dll-Typelib deklariert sind. Die Funktion Array wird in der DLL als rtcArray implementiert. Der Nutzen zu wissen, dass das zweifelhaft ist, ist, dass sein einziges Argument ein ParamArray ist, was bedeutet, dass wenn Sie es direkt von VBE7.dll aufgerufen hätten, müssten Sie ein Array erstellen, damit es Ihnen dasselbe Array zurückgibt ... Dies erklärt teilweise, warum es nicht auf der Typelib ist - ein COM-Aufruf müsste das Gleiche tun, und das Marshalling würde im Grunde dasselbe tun, was man von der Funktion erwarten würde.

LBound und UBound erscheinen nicht einmal als Funktionen in der Export-Tabelle, daher vermute ich, dass sie intern eher wie "keywords" behandelt werden als die First-Class-Funktionen. Dies macht etwas sinnvoll, da es ziemlich trivial ist, die Grenzen eines SAFEARRAY wenn Sie einen Zeiger auf die Automationsstruktur haben (Sie indexieren einfach in das rgsabound -Array am Ende davon und lesen cElements und lLbound von Es ist wieder eine Vermutung, aber ich würde annehmen, dass dies die Flexibilität erlaubt, LBound und UBound sowohl mit Arrays mit fester Länge als auch mit Arrays mit variabler Länge arbeiten zu lassen Im festen Fall wird das Array im Grunde als Speicherblock verwaltet mit einem Indexer (mehr wie ein VT_CARRAY als ein VT_SAFEARRAY ). Ich könnte mir vorstellen, dass die interne Handhabung einfacher oder bequemer ist als die Bereitstellung erstklassiger Funktionen.

    
Comintern 12.01.2017, 21:05
quelle
2

Sie haben won't find Debug entweder im Object Browser, noch ihre Methoden Assert und Print .

Sie werden keine Statements finden, die wie Methoden verwendet werden, wie Open , Close , Get und Put , weshalb Sie Intellisense nicht erhalten, wenn Sie verwenden diese Anweisungen, und die Syntax muss gespeichert werden.

Sie finden Load und Unload als Mitglieder von VBA.Global , aber es ist nicht klar, wozu sie sonst gehören, und ihre Argumente sind spät gebunden Objects . Die VBA-Dokumentation besagt, dass Load und Unload Anweisungen sind, obwohl sie im Objektbrowser als Methoden angezeigt werden.

    
ThunderFrame 12.01.2017 21:38
quelle
-1

Beachten Sie, dass Sie die Reihenfolge der Referenzen verschieben können, und es wird einen Unterschied machen. Versuchen Sie, VBA nach oben oder ganz oben in der Referenzliste zu verschieben. Ich glaube, wenn etwas anderes auch ein BASIC-Schlüsselwort definiert, stiehlt es es in gewissem Sinne. Ich hatte einmal Recht verschwinden lassen und weil mir die Reihenfolge der Referenzen nicht bekannt war, musste ich alle Referenzen von Right auf VBA.Right ändern. Es ist möglicherweise das gleiche mit dem ubound, lbound oder Array.

    
Bill Hileman 12.01.2017 21:58
quelle

Tags und Links