Вопрос по – Остановить Visual Basic 6 от изменения моего корпуса

59

Очень простой вопрос, на который, по-видимому, невозможно найти достойный ответ: как я могу заставить Visual Basic 6 прекратить менять мой ^ @ # * регистр переменных!?!

Я знаю, что общее мнение очень многих пользователей VB состоит в том, что эта "функция" на самом деле довольно полезно, но я сомневаюсь, что они используют его с любой системой контроля версий. Это абсолютно БЕЗУМНО, когда вы пытаетесь сотрудничать в проекте любого значительного размера с несколькими другими разработчиками. Если игнорировать, вы производите тысячи ложноположительных "изменений" к вашим файлам (даже без каких-либо реальных изменений кода!), которые загрязняют историю изменений и в некоторых случаях делают практически невозможным обнаружение фактических изменений, которые имели место.

Если вы не игнорируете это (например, мой офис, где мы были вынуждены реализовать политику «без ненужного изменения регистра»), вы потратите в 5 раз больше времени, чем обычно на каждую фиксацию, потому что вам нужно аккуратно отменить VB » s & quot; исправления & quot; на каждый файл, иногда возвращая сотни строк, чтобы поместить в одну строку изменения.

Конечно, там должен быть параметр, плагин, хак и т. Д., Который может удалить эту нежелательную «функцию»? Я готов использовать любой способ, который смогу использовать, если только он не требует, чтобы я пробирался сквозь кучу фантомных различий. И чтобы подавить пару жалоб заранее: нет, я не могу отключить обнаружение случаев в моем инструменте сравнения, это не главное. Нет, мы не можем просто внести изменения в глобальном масштабе. Мы работаем с сотнями тысяч LOC, над которыми работают несколько разработчиков, охватывающих многие годы разработки. Синхронизация, которая неосуществима с точки зрения бизнеса. И, наконец: Нет, мы не можем перейти на VB.net или портировать на другой язык (как бы мне этого не хотелось).

(И да, я сейчас немного раздражен. Можете ли вы сказать? Мои извинения, но это стоит мне времени и денег моей компании, и я не считаю это приемлемым.)

Это стало одним из факторов при взвешивании необходимости обновления кода VB6 до C #. Не единственное, не самое важное, но оно может перевернуть вещи. DaveInCaz
возможный дубликатVB6 Editor changing case of variable names! raven
Я понимаю вашу боль, это огромная проблема с VBA, как показывает ссылка на curtisk. Lance Roberts
Наличие приватной константы SPACE, объявленной в одном файле проекта, делает невозможным использование встроенной функции Space () в любом файле проекта ... kbshimmyo

Ваш Ответ

8   ответов
4

ПРОСТОЙ СПОСОБ:Dim каждая переменная в том случае, если вы хотите. Иначе,VBA изменит это так, что это непонятно.

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

в подпрограмме изменит ВСЕ случаи на те, что вDim заявление

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Specifically for controlling the case of enum values, есть надстройка VB6 IDE, которая может быть полезна. Enums, кажется, имеют немного уникальную версию этой проблемы.

Как описано в ссылке ниже:

The VB6 IDE has an annoying quirk when it comes to the case of Enum members. Unlike with other identifiers, the IDE doesn't enforce the case of an Enum member as it was declared in the Enum block. That occasionally causes an Enum member that was manually written to lose its original case, unless a coder typed it carefully enough. ...

However, if a project contains a lot of Enums and/or a particular Enum has a lot of members, redeclaring the members in each of them can get quite tedious fast. ...

Ref:http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums

...load and unload the add-in as needed via the Add-In Manager dialog box. Usage is as simple as selecting the entire Enum block, right-clicking and then choosing the "Lock Enum Case" context menu item.

1

нам разрешено отключать чувствительность к регистру в нашем инструменте сравнения версий!

Похоже, что автоматическая коррекция регистра в среде IDE VB6 иногда изменяет регистр в объявлениях переменных и ссылках, возможно, в зависимости от порядка, в котором модули перечислены в файле VBP? Но IDE не говорит вам, что файл должен быть сохранен. Таким образом, проблема появляется только при сохранении файла из-за другого редактирования. Мы кратко попытались предотвратить это, проверив все файлы в проекте и тщательно продумав случай, но он не исчез.

Я полагаю, вы могли бы перечислить имена переменных, на которые влияют - обычные подозреваемые - это имена из одной буквы, такие как «I», «X»; и "Y", возможно, потому что они используются в стандартных обработчиках событий, таких как MouseDown. Затем напишите надстройку, которая "будет искать все объявления". Как и Quot; и заставить дело наверх. Запустите надстройку на своих модулях, прежде чем регистрировать их. Возможно, вы сможете запустить надстройку для автоматического запуска при сохранении в VB6.

РЕДАКТИРОВАТЬ: что-то, о чем я только что подумал: адаптироватьОтвет Фреда, С этого момента каждый раз, когда вы регистрируете файл, добавляйте блок сверху, чтобы установить канонический случай для обычных подозреваемых. Если ничего другого, это проще, чем возвращать сотни строк вручную. В конце концов у вас будет этот блок в каждом файле & amp; возможно тогда проблема перестанет происходить.

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

что есть кто-то, чтобы сделать это. Среда IDE изменит регистр имени переменной на тот, который будет, когда он объявлен. Но, честно говоря, в те времена я работал над несколькими крупными проектами VB6 и никогда не считал это проблемой. Почему люди в вашей команде разработчиков постоянно меняют объявления переменных? Похоже, вы не установили четкую политику именования переменных, которую вы применяете. Я знаю, что ты расстроен, так что не обижайся, но это может быть твоей политикой, которой не хватает в этом отношении.

К сожалению, согласно этомуТАК нить, альтернативные VB6 IDE трудно найти. Поэтому лучше всего решить эту проблему с помощью политики. Или перейдите на VB.NET. :)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
-6

и я понятия не имею, о чем вы. Единственное, на что, я думаю, вы ссылаетесь, это то, что intellisense изменит заглавные буквы имен переменных в соответствии с их объявлениями. Если вы жалуетесь на это, мне бы хотелось поинтересоваться, почему, черт возьми, они были введены любым другим способом с самого начала. И если это ваша проблема, нет, я не знаю, как отключить ее. Я бы посоветовал вам за один раз проверить каждый файл, убедиться, что все ограничения в объявлениях и использовании переменных совпадают, и проверить заново.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Toji
Error: User Rate Limit Exceededwhen exactlyError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

обычно используя примеры выше (Dim CorrectCase) и удалив его снова. Затем я запустил VB для сохранения КАЖДОГО файла, выполнив поиск / замену с учетом регистра & quot; End & quot; с "Конец" (без функциональных изменений, но достаточно, чтобы восстановить VB). Как только это будет сделано, я смогу сделать один коммит, чтобы стандартизировать кейс, упрощая его дальнейшее развитие.

21

Вот сценарий реального мира и как мы решили его для нашего проекта LK VB6 350k.

Мы используем Janus Grid, и в какой-то момент все строки кода, которые ссылались на свойство DefaultValue JSColumn, превратились в defaultValue. Это была возможность отладить всю неприятность IDE.

Я обнаружил, что ссылка на MSXML была только что добавлена, и теперь IDE получает ISchemaAttributes & apos; Свойство defaultValue до библиотеки типов Януса.

После некоторых экспериментов я обнаружил, что IDE собирает "зарегистрированные" идентификаторы в следующем порядке:

  • Referenced Libraries/Projects from Project->References in the order they are listed

  • Controls from Project->Components (in unknown order)

  • Source Code

Итак, простое решение, которое мы сделали, - это создание фиктивного класса / интерфейса с методами, которые содержат наш надлежащий регистр. Так как у нас уже была библиотека типов для всего проекта, на которую мы ссылались из каждого проекта до чего-либо другого, это было безболезненно.

Вот часть IDL для нашего интерфейса IUcsVbIntellisenseFix:

[
  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();
    ...
}

Мы добавили много методов в IUcsVbIntellisenseFix, некоторые из них названы в честь элементов enum, которые мы использовали для опечатки, и всего, что мы хотели исправить. То же самое можно сделать с помощью простого класса VB в общей библиотеке (ActiveX DLL), на которую ссылаются из каждого проекта.

Таким образом, наш исходный код в какой-то момент приблизился к правильному регистру, потому что при извлечении IDE фактическиfixed корпус в соответствии с IUcsVbIntellisenseFix корпус. Теперь мы не можем ошибочно перечислить перечисления, методы или свойства, даже если попытаемся.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Toji
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/664370/…
18

#If False Then
    Dim CorrectCase
#End If

может помочь.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Toji

Похожие вопросы