У вас есть примеры использования VB6 для программирования в формате push-the-envelope?

VB6 имел репутацию слишком снисходительного (и тем самым допускающего неправильные методы) и скрывающего сложности, о которых, возможно, разработчикам было бы лучше знать. Но я обнаружил, что, скажем, 90% приложений можно сделать на VB6.

Но я хотел бы увидеть больше примеров того, как можно обойти ограничения VB6. Например, однажды я нашел код для использования указателей в VB6 путем обращения к ОС Windows. В результате некоторые манипуляции со строками в больших документах (около 2 МБ) сократились с 30 минут до чуть более 3 секунд. Есть ли у кого-нибудь другие примеры выхода за пределы VB6?

Н.Б. не VB.Net.


vb6
person davek    schedule 01.10.2009    source источник
comment
Как совершаются звонки в ОС Windows VB6? Разве это не совсем противоположно вашей точке зрения - показывает, что VB6 сам по себе слишком медленный? Одни и те же вызовы ОС могут быть сделаны с любого языка...   -  person Kobi    schedule 01.10.2009
comment
Моя точка зрения заключалась в том, что, учитывая ограничения, связанные с необходимостью кодирования в VB6, иногда существуют обходные пути для распространенных препятствий - отсутствие указателей является одним из распространенных.   -  person davek    schedule 01.10.2009
comment
убрал слово особенности из названия, так как это, вероятно, вводило в заблуждение   -  person davek    schedule 01.10.2009
comment
То, что вы называете разоблачением, я бы назвал просто взрослым.   -  person John Saunders    schedule 01.10.2009
comment
Можем ли мы получить лучшее определение кода push-the-envelope, пожалуйста?   -  person Pod    schedule 01.10.2009
comment
DaveK, я немного переформулировал ваш вопрос, чтобы попытаться сделать его более ясным, так как была некоторая критика (и отрицательный голос). Надеюсь, я сохранил смысл вашего первоначального вопроса. Пожалуйста, измените его обратно, если хотите.   -  person MarkJ    schedule 01.10.2009
comment
@MarkJ: спасибо, что нашли время, чтобы внести эти улучшения - я ценю это.   -  person davek    schedule 01.10.2009


Ответы (7)


Джоэл сказал некоторые хорошие вещи о VB6 еще в 2001 году.

Многие программы VB6 являются спагетти либо потому, что они сделаны быстро и грязно, либо потому, что они написаны программистами-хакерами, не обученными объектно-ориентированному программированию или даже структурному программированию.

Мне было интересно, что произойдет, если вы возьмете первоклассных программистов на C++, мечтающих об указателях, и позволите им писать код на VB6. Что я обнаружил в Fog Creek, так это то, что они становятся сверхэффективными кодирующими машинами. Код выглядит неплохо, он объектно-ориентирован и надежен, но вы не тратите время на использование инструментов уровня ниже, чем вам нужно. Я потратил годы на написание кода для C++/MFC и годы на написание кода на Visual Basic, и позвольте мне сказать вам, что VB6 намного, намного продуктивнее...

Одна из особенностей Visual Basic 6 заключается в том, что он не всегда дает вам доступ ко всему набору возможностей Windows, необходимых для создания безупречного приложения. Но что она делает лучше, чем почти любая другая среда программирования, так это позволяет вам погрузиться в код C++ (или вызвать C API), когда вы в отчаянии или когда вам нужна дополнительная скорость.

Это было написано в 2001 году: при создании новой программы для Windows сегодня, ИМХО, очевидным выбором для лучшей производительности является VB.Net или C#. (ШУТКА: C# — это просто Visual Basic с точкой с запятой.)

Возвращаясь к VB6: есть много хороших примеров того, как вызывать C API для выполнения чего-то особенного или просто для ускорения работы. Вот некоторые из моих любимых ссылок:

person MarkJ    schedule 01.10.2009
comment
@MarkJ: Отличные ресурсы - спасибо. Я тоже забыл о статье Джоэла, так что спасибо за напоминание. - person davek; 01.10.2009
comment
Мой фаворит — «Программирование оболочки Visual Basic» Дж. П. Гамильтона. - person ejspencer; 01.10.2009
comment
@ДэйвК. Именно чтение этой конкретной статьи впервые сделало меня поклонником блога Джоэла, поэтому написание этого ответа было настоящей ностальгией! - person MarkJ; 01.10.2009
comment
Спасибо за предложения. Единственная книга, которой у меня не было, была заказана на Ebay. - person Tony Toews; 05.10.2009

Одна неприятная уловка заключалась в том, чтобы злоупотреблять CallWindowProc для вызова произвольного кода, передавая на него указатель. Технически это нарушает контракт этой функции, поскольку ее предполагается использовать только с дескрипторами (а не с прямыми указателями кода), полученными через GetWindowLong; но на практике так мало людей знают об этом, что реализация вынуждена разрешать произвольные указатели кода. Это позволяет вам вызывать любой указатель на функцию, пока он stdcall, и принимает 4 аргумента того же размера, что и WndProc аргумента.

Один еще более неприятный трюк, который является следствием вышеизложенного, заключается в том, что вы можете динамически генерировать код таким образом - просто вставьте его в массив байтов и используйте CallWindowProc для перехода к нему. Таким образом, вы можете внедрить собственный код, не созданный в VB6, в приложение VB6 без каких-либо внешних библиотек DLL. Конечно, в наш век бит NX, включенный по умолчанию, это, вероятно, уже не такая уж хорошая идея (если она когда-либо была, то есть) ...

person Pavel Minaev    schedule 01.10.2009
comment
@Pavel: спасибо за ваш вклад - как раз то, что я искал. - person davek; 01.10.2009

Я не уверен, что он кладет в свои бутерброды, но почти все, что можно найти в Advanced Visual Basic 6 Мэтью Керланда представляет собой нестандартное программирование с использованием VB6. Действительно отличная вещь.

person onedaywhen    schedule 01.10.2009
comment
+1. Не давите на конверт сильнее, чем сейчас, он лопнет! - person MarkJ; 01.10.2009

Не могу оставить этот вопрос без ответа, в котором упоминается Hardcore Visual Basic Брюса МакКинни, который теперь (чудесным образом) доступен в Интернете:

http://vb.mvps.org/hcvb.asp

Это отличное чтение от автора, которому явно нравится дух Basic.

person AakashM    schedule 02.10.2009

Понимание того, что большинство шаблонов проектирования Gang of Four основаны на реализации интерфейса, а не на наследовании, и поэтому могут быть легко использованы в Visual BASIC 6.

Возможность сделать это значительно улучшила дизайн моего приложения CAD/CAM.

person RS Conley    schedule 01.10.2009

person AngryHacker    schedule 02.10.2009

Подклассы Пола Катона, продолжение ЛаВольпе (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68737) позволяет вам делать все, что вам нужно, подключаясь к событиям Windows, без сбоев IDE. С этим вы можете реализовать все необходимое в Windows. В образцах есть сумасшедшие вещи, которые вы, возможно, никогда не думали, что это возможно.

person Luis Lobo Borobia    schedule 06.10.2009