69 votes

Arrêtez Visual Basic 6 de changer mon boîtier

Question très simple qui est apparemment impossible de trouver une bonne réponse à: Comment puis-je faire de Visual Basic 6 cessent de changer ma ^@#*ing variable boîtier!?!

Je sais que, de l'avis général d'un grand nombre d'utilisateurs de VB, c'est que cette "fonctionnalité" est en fait tout à fait utile, mais je doute qu'ils l'utiliser avec n'importe quel système de contrôle de source. C'est absolument EXASPÉRANT lorsque vous essayez de collaborer à un projet de taille importante avec plusieurs autres développeurs. Si ignoré, vous produisez des milliers de faux-positifs "changements" à vos fichiers (même ceux qui n'ont pas les changements de code!) qui polluent la révision de l'histoire et de la rendre presque impossible, dans certains cas, de localiser le changement qui a eu lieu.

Si vous ne l'ignorez pas (comme mon bureau, où nous avons été contraints de mettre en œuvre un "pas inutiles cas de changement de" politique de), vous passez à 5x le temps vous le feriez normalement sur chaque commit parce que vous avez soigneusement revenir hors VB de "corrections" sur chaque fichier, parfois, de revenir à des centaines de lignes à mettre dans un changement de ligne.

Il doit sûrement y avoir un paramètre de plug-in, hack, etc. qui peut supprimer indésirables "fonction"? Je suis prêt à prendre n'importe quelle méthode je peux obtenir tant qu'il n'a pas besoin de moi pour chercher à travers des piles de fantôme de diff. Et l'écraser quelques plaintes à l'avant: Non, je ne peux pas désactiver la détection des cas dans mon outil de comparaison, qui n'est pas le point. Non, on ne peut pas faire l'affaire des changements à l'échelle mondiale. Nous travaillons avec des centaines de milliers de LOC en train de travailler sur plusieurs développeurs s'étendant sur plusieurs années de développement. Synchronisation qui n'est pas réalisable d'un point de vue business. Et, enfin: Non, nous ne peuvent pas passer à VB.net ou d'un port à un autre langage (comme beaucoup comme j'aimerais).

(Et oui, je suis juste un tout petit peu en colère en ce moment. Pouvez-vous en dire? Mes excuses, mais cela me coûte du temps et de mon argent de la compagnie, et je ne trouve pas ça acceptable.)

24voto

wqw Points 6624

Voici un scénario réel et comment nous avons résolu pour nos 350 k LOC VB6 projet.

Nous sommes à l'aide de Janus de la Grille et à un certain moment, toutes les lignes de code qui référencées propriété Valeur par défaut de JSColumn tourné à la valeur par défaut. Ce fut l'occasion pour déboguer l'ensemble de l'IDE de nuisance.

Ce que j'ai trouvé qu'une référence à MSXML a simplement été ajoutés et maintenant l'IDE ramasse ISchemaAttributes' valeur par défaut de la propriété avant le Janus de la Grille de la bibliothèque de types.

Après quelques expériences, j'ai trouvé que l'IDE rassemble "enregistré" identificateurs dans l'ordre suivant:

  • Référencé Bibliothèques/Projets du Projet->Références dans l'ordre où ils sont énumérés

  • Les contrôles de Projet->Composants (dans l'ordre inconnu)

  • Le Code Source

Donc la seule solution nous a fait était de créer un mannequin de classe/interface avec les méthodes de tenir notre propre corps. Depuis que nous avons déjà eu un projet à l'échelle de typelib nous avons référencé de chaque projet avant toute autre bibliothèque de types, c'était facile à faire.

Voici une partie de l'IDL pour notre IUcsVbIntellisenseFix interface:

[
  odl,
  uuid(<<guid_here>>),
  version(1.0),
  dual,
  nonextensible,
  oleautomation
]
interface IUcsVbIntellisenseFix : IDispatch {
    [id(1)] HRESULT DefaultValue();
    [id(2)] HRESULT Selector();
    [id(3)] HRESULT Standalone();
    ...
}

Nous avons ajouté beaucoup de méthodes pour IUcsVbIntellisenseFix, certains d'entre eux nommé d'après enum articles que nous avons utilisé pour épeler et ce que nous voulons corriger. La même chose peut être fait avec un simple VB classe dans une bibliothèque partagée (DLL ActiveX) qui est référencé à partir de chaque projet.

De cette façon, notre code source à un certain point convergent de bon boîtier, parce qu'après le check-out de l'IDE réellement fixe le boîtier comme par IUcsVbIntellisenseFix boîtier. Maintenant, nous ne pouvons pas écorcher les énumérations, des méthodes ou des propriétés, même si nous essayons de nous.

24voto

Simon D Points 1453

En fonction de votre situation en ajoutant

 #If False Then
    Dim CorrectCase
#End If
 

pourrait aider.

6voto

curtisk Points 8623

Peut trouver un aperçu ici , bonne chance!

5voto

UserX Points 21

MANIÈRE SIMPLE: Dim chaque variable dans le cas où vous le souhaitez. Sinon, VBA le modifiera de manière incompréhensible.

 Dim x, X1, X2, y, Yy  as variant
 

dans un sous-programme changera TOUS les cas en ceux de la déclaration Dim

2voto

MarkJ Points 21438

Je peux compatir. Heureusement, nous avons le droit de désactiver le compte de la casse dans notre contrôle de version outil de comparaison!

Il semble que le VB6 IDE automatique en cas de correction-parfois des changements de cas dans les déclarations de variables et de références, peut-être en fonction de l'ordre dans lequel les modules sont répertoriés dans le fichier VBP? Mais l'IDE n'est pas de vous dire que le fichier doit être enregistré. Donc, le problème ne s'affiche que lorsque vous avez enregistré le fichier en raison d'une autre édition. Nous avons brièvement essayé d'empêcher cela en vérifiant tous les fichiers dans un projet et le réglage de l'affaire avec soin, mais il n'est pas allé loin.

Je suppose que l'on peut répertorier les noms de variables qui sont touchées par les suspects habituels sont d'une lettre des noms comme "I", "X" et "Y", peut-être parce qu'ils sont utilisés dans la norme des gestionnaires d'événements comme MouseDown. Ensuite, écrire un add-in qui vous recherche de toutes les déclarations "Comme" et force le cas à supérieur. Exécuter le complément sur vos modules avant de les archiver. Vous pourriez être en mesure de déclencher l'add-in pour s'exécuter automatiquement lorsque vous enregistrez en VB6.

EDIT: quelque Chose que j'ai pensé à: adapter la réponse de Fred. À partir de maintenant, chaque fois que vous vérifiez dans un fichier, ajouter un bloc en haut à établir des procès canonique pour les suspects habituels. Si rien d'autre, il est plus facile que de revenir à des centaines de lignes à la main. Finalement, vous aurez ce bloc dans chaque fichier et peut-être que le problème n'aura pas lieu.

#If False Then
  Dim I, X, Y ' etc '
#End If

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X