Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: davekОтветов: 7

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

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

Н.Б. не VB.Net.

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

vb6

Ответы

Ответ 1 · рейтинг 5 · MarkJ

Джоэл сказал некоторые хорошие вещи о 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 для выполнения чего-то особенного или просто для ускорения работы. Вот некоторые из моих любимых ссылок:

Ответ 2 · рейтинг 6 · Pavel Minaev

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

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

Ответ 3 · рейтинг 4 · onedaywhen

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

Ответ 4 · рейтинг 3 · AakashM

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

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

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

Ответ 5 · рейтинг 2 · RS Conley

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

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

Ответ 6 · рейтинг 1 · AngryHacker

  • Как насчет полного парсера XML в VB6.
  • Автоматически рисуемые неправильные формы на основе пикселей.

Ответ 7 · Luis Lobo Borobia

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы