Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/56: Рейтинг темы: голосов - 56, средняя оценка - 4.54
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Быстрый старт в изучении C++ для относительно опытных программистов Basic

18.04.2020, 16:11. Показов 14733. Ответов 253

Студворк — интернет-сервис помощи студентам
В этой ветке предлагаю обсуждать сходства и различия между C++ и Visual Basic.
Ну хотя бы для упрощения процесса изучения параллельного (дополнительного) языка для тех, кто уже относительно неплохо знаком с Visual Basic.
Ну просто как-то "не вкусно" начинать изучение совсем уж с нуля, когда, в принципе, уже и без того много знаешь (циклы, ветвления, указатели, видимость переменных ... ).

На самом деле, начал сейчас просмортр на ютубе курса по C++. Дядька очень толково и понятно всё объясняет, явно есть у него талант хорошего преподавателя.

Самые первые отличия, которые бросились в глаза, это:
- комменты обозначают двумя косыми чертами вместо апострофа,
- в конце каждой строки точка с запятой,
- все процедуры, функции, "тела" циклов ... в фигурных скобках,
- вложенные циклы можно описывать одной строкой,
- если переменная объявлена, но ей не присвоено значение, то она содержит случайный "мусор" из памяти, а не как у нас в бейсике, где сразу получает значение ноль или пустую строку,
- массивы с квадратными скобками вместо круглых,
- область видимости переменных ограничена фигурными скобками и причём неважно функция это, цикл или "тело" функции IF, а не как у нас область видимости переменных ограничена только функциями и процедурами.

Ветка открытая, пишите кто хочет.
Особенно приветствуются советы опытных специалистов, уже овладевших несколькими языками.
Ну уж им-то гораздо виднее, в чём сходство и различие разных языков.

Сказать по правде, лично мне сейчас C++ и его младший брат нужны, главным образом, для удобства изучения материалов MSDN.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2020, 16:11
Ответы с готовыми решениями:

предложение для опытных программистов
добрый день уважаемые госпда программисты - необходима помощь по выполнению лабораторных по предмету Операционные Системы. Ищу человека...

Быстрый старт и софт для Modicon TM251MESE (Schneider Electric)
Так сложилась ситуация, что в скором времени предстоит познакомиться с ПЛК TM251MESE от Sneider Electric. Начал интересоваться как...

Книги или справочники для опытных(или проффесиональных) программистов!
Пожалуйста, Подскажите книги или справочники для опытных и проффесиональных программистов! Особенно хотелось бы найти: 1) полный...

253
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 12:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну это уже "высший пилотаж".
Разницы особой нет.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Да в том-то и дело, что уже сейчас, оглядываясь назад, и мне тоже всё кажется очень простым. Всего 5 WINAPI функций пришлось использовать в конечном итоге. А когда только начинал во всём этом материале (по PDH) разбираться, было реально сложно понять, какие именно функции надо использовать. Их же там очень много.
А что документация говорит на этот счет? Количество функций не говорит в общем случае ни о чем. Равносильно теже самые функции использовать в каком-нибудь C - количество функций от этого не изменится. Это не аргумент.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 13:13
Цитата Сообщение от The trick Посмотреть сообщение
Любую задачу с указателями можно выполнить с использованием ссылок в VB6.
Можно маленький пример. Скажем выделите в ссылку 100 байт памяти функцией LocalAlloc и запишите по смещению 18, 8-ми байтовое число.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 13:40
Цитата Сообщение от locm Посмотреть сообщение
Можно маленький пример. Скажем выделите в ссылку 100 байт памяти функцией LocalAlloc и запишите по смещению 18, 8-ми байтовое число.
И как это согласуется с концепцией безопасности? Кто будет освобождать память? В VB6 не нужно делать так как ты описал, хотя и с легкостью можно (GetMem8), но речь не об этом. Для работы со ссылками сущность оборачивается в объект, который безопасен и жизнь которого легко контролируется в отличии от памяти. На этот объект можно ссылаться откуда угодно и объект будет жить пока есть хоть одна ссылка на него.
Пример который привел ты решается просто:
Visual Basic
1
2
3
4
5
6
7
Dim pBuf    As Long
 
pBuf = LocalAlloc(LMEM_MOVEABLE, 100)
 
MemCurr(pBuf + 18) = 1000@ ' // Записать 1000.0000 по смещению 18
 
Debug.Print MemCurr(pBuf + 18) ' // Прочитать Currency по смещению 18
MemCurr соответственно обертка в TLB над GetMem8/PutMem8.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 14:19
Цитата Сообщение от The trick Посмотреть сообщение
И как это согласуется с концепцией безопасности?
Ну вы же написали
Цитата Сообщение от The trick Посмотреть сообщение
Любую задачу с указателями можно выполнить с использованием ссылок в VB6.
А это можно понимать что все что возможно с указателями, возможно с ссылками. Или как это еще понимать?
Я конечно удивился, учитывая что судя по коду ссылки это указатели на объекты, но подумал может есть какая-то лазейка позволяющая использовать их как обычные указатели.

Цитата Сообщение от The trick Посмотреть сообщение
Кто будет освобождать память?
Функция LocalFree.

Цитата Сообщение от The trick Посмотреть сообщение
в отличии от памяти.
Ни разу не проходилось в VB непосредственно работать с памятью? Многие WinAPI функции этого требуют.

Цитата Сообщение от The trick Посмотреть сообщение
На этот объект можно ссылаться откуда угодно и объект будет жить пока есть хоть одна ссылка на него.
Это похоже уже из технологии COM. В C++ объекты устроены по другому.

Цитата Сообщение от The trick Посмотреть сообщение
Пример который привел ты решается просто
Не совсем то. Речь шла про ссылки, а не про переменные. Но я уже понял что с помощью ссылок это не получится.

Цитата Сообщение от The trick Посмотреть сообщение
MemCurr соответственно обертка в TLB над GetMem8/PutMem8.
То есть в VB нет стандартных средств работы с памятью? Сложно наверно. Мне часто приходится работать с памятью. Даже не представляю как в VB без этого обходятся.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 15:02
Цитата Сообщение от locm Посмотреть сообщение
А это можно понимать что все что возможно с указателями, возможно с ссылками. Или как это еще понимать?
Ну да, ты изначально начинаешь проектировать задачу с небезопасной концепцией. Я уже написал что ручное управление памятью - небезопасно, вместо этого нужно использовать механизмы которые безопасны и предоставляются языком. Для чего выделять память и размещать там 8 байтовое число по заданному смещению? Задача бессмыслена или задача для задачи.
Реальная задача к примеру, динамическая загрузка сущностей и работа с ними. В C это решается к примеру через загрузку динамических библиотек с фиксированным импортом и вызов функций по указателю. В VB6 это решается аналогично только используя ссылки на объекты из библиотек и вызов методов фиксированных интерфейсов. Вместо указателя на любой тип данных нужно иметь указатель на объект олицетворяющий это тип данных. Это безопаснее, это гибче. Если у тебя возникает в программе задача использовать указатель, просто подумай об этом через концепцию безопасного программирования VB6 и ты сможешь эту задачу решить через ссылки.

Цитата Сообщение от locm Посмотреть сообщение
Функция LocalFree.
Для этого нужно следить за этой памятью. В концепции безопасного программирования VB6 не нужно за этим следить. Нужна динамическая память - есть SA массивы, объекты, строки и т.п. За временем жизни каждой сущности следит компилятор, а не программист. Но тебе никто не запрещает обходить эти правила, но тогда ты ответственнен сам за освобождение памяти как и в C языке.

Цитата Сообщение от locm Посмотреть сообщение
Ни разу не проходилось в VB непосредственно работать с памятью? Многие WinAPI функции этого требуют.
Ну и работайте, я же написал есть массивы, строки, за жизнью которых компилятор сам следит. Если нужна работа с памятью именно на низком уровне - работайте, никто не запрещает, но тогда и следуйте всем тем же правилам что и в C.

Цитата Сообщение от locm Посмотреть сообщение
Это похоже уже из технологии COM. В C++ объекты устроены по другому.
Так и есть. VB6 работает по правилам COM и пол винды так работает. ООП плюсов намного сложнее, их концепция не согласуется с безопасным программированием, там легко "выстрелить себе в ногу". Там к примеру можно создать объект в стеке и вернуть ссылку в вызывающую процедуру (что вызовет падание). В VB6 заведомо запрещены такие моменты, т.к. там все объекты (к слову как к примеру в шарпе) выделяются в динамической памяти.

Цитата Сообщение от locm Посмотреть сообщение
Не совсем то. Речь шла про ссылки, а не про переменные. Но я уже понял что с помощью ссылок это не получится.
Какие переменные? Ты привел задачу, тебе показали решение. В чем проблема? Задача была решена с помощью "сырых" указателей, а не ссылок, поскольку задача соответствующая. Прелесть VB6 в том что любую логику можно обернуть в объект, и уже с объектом безопасно работать, ссылаться на него (как и в C ссылать с помощью указателей), вызывать его методы по ссылке (также как и вызываются функции по указателю).

Цитата Сообщение от locm Посмотреть сообщение
То есть в VB нет стандартных средств работы с памятью? Сложно наверно. Мне часто приходится работать с памятью. Даже не представляю как в VB без этого обходятся.
Есть, к слову это стандартные функции из рантайма. Для выделения и освобождения памяти есть массивы, строки. Если ты не понял до сих пор, последний раз повторю что работа с сырой памятью небезопасна, поэтому такая возможность заведомо исключена. Тоже самое с потоками. В сыром виде работа с потоками исключена, можно создать STA в новом потоке и в нем создать объект.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 16:05
Цитата Сообщение от The trick Посмотреть сообщение
Для чего выделять память и размещать там 8 байтовое число по заданному смещению? Задача бессмыслена или задача для задачи.
Это было для примера.
Вот допустим как я эту задачу решу на PB.
PureBasic
1
2
*mem = AllocateMemory(100)
PokeQ(*mem+18, 0)
Цитата Сообщение от The trick Посмотреть сообщение
Я уже написал что ручное управление памятью - небезопасно, вместо этого нужно использовать механизмы которые безопасны и предоставляются языком.
Намекаете на использование массива? Т. е.
PureBasic
1
2
Dim Buff.a(100)
PokeQ(@Buff(18), 0)
В принципе тоже возможно. Если массив локальный, память автоматически освободится при выходе из процедуры. Если массив в структуре, то используемая им память также освободится при освобождении структуры.

Цитата Сообщение от The trick Посмотреть сообщение
Реальная задача к примеру, динамическая загрузка сущностей и работа с ними.
Вот другая реальная задача, прием бинарных данных из сети, COM порта, USB порта. Сколько придет заранее неизвестно и чтобы разделять данные нужно их анализировать. Как предлагаете ее решать?

Цитата Сообщение от The trick Посмотреть сообщение
В C это решается к примеру через загрузку динамических библиотек с фиксированным импортом и вызов функций по указателю.
Речь вообще не об этом.

Цитата Сообщение от The trick Посмотреть сообщение
Если у тебя возникает в программе задача использовать указатель, просто подумай об этом через концепцию безопасного программирования VB6 и ты сможешь эту задачу решить через ссылки.
Выше привел пример. Нужно принимать и отправлять данные по USB. Ну получу я ссылку на объект, что это даст? Тогда объект должен решать задачу. А как он это сделает? Получит ссылку на другой объект, а тот на третий, на 4, 5 и т. д. Задачу это не решит.

Цитата Сообщение от The trick Посмотреть сообщение
Для этого нужно следить за этой памятью.
Что сложного? Делим программу на множество отдельных модулей. Работаем с памятью в пределах этого модуля и вероятность ошибки минимальна.

Цитата Сообщение от The trick Посмотреть сообщение
В концепции безопасного программирования VB6 не нужно за этим следить.
То есть задачи выходящие за пределы концепции, не решить в VB?
Если посмотреть проекты в вашем блоге, можно найти множество где производится работа с памятью. Как же концепция безопасного программирования?

Цитата Сообщение от The trick Посмотреть сообщение
тогда и следуйте всем тем же правилам что и в C.
Так и поступаю.

Цитата Сообщение от The trick Посмотреть сообщение
Какие переменные? Ты привел задачу, тебе показали решение.
Речь шла про ссылки. Я ведь выделил это. Быстрый старт в изучении C++ для относительно опытных программистов Basic

Цитата Сообщение от The trick Посмотреть сообщение
Есть, к слову это стандартные функции из рантайма.
Документированные?

Цитата Сообщение от The trick Посмотреть сообщение
работа с сырой памятью небезопасна
Если нет опыта, многое в программировании может привести к ошибкам.

Цитата Сообщение от The trick Посмотреть сообщение
Тоже самое с потоками.
MS слишком сильно заботится и ладно если о пользователях, но они решили заботится о программистах считая их домохозяйками, отсюда много ограничений.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 16:40
Цитата Сообщение от locm Посмотреть сообщение
Это было для примера.
Вот допустим как я эту задачу решу на PB.
И где тут LocalAlloc? Не вижу никаких преимуществ перед способом который привел я на VB6.

Цитата Сообщение от locm Посмотреть сообщение
Намекаете на использование массива? Т. е.
Разницы нет. В любом случае это небезопасно. Что будет если написать PokeQ(@Buff(99), 0)?

Цитата Сообщение от locm Посмотреть сообщение
Вот другая реальная задача, прием бинарных данных из сети, COM порта, USB порта. Сколько придет заранее неизвестно и чтобы разделять данные нужно их анализировать. Как предлагаете ее решать?
Не понимаю в чем тут может быть проблема? Если WinSock/MSCOMM контролы которые люди используют не один десяток лет уже, я не говорю даже о непосредственном использование WinAPI.

Цитата Сообщение от locm Посмотреть сообщение
Речь вообще не об этом.
А о чем? Это прямой безопасный аналог сырого указателя на функцию в С.

Цитата Сообщение от locm Посмотреть сообщение
Выше привел пример. Нужно принимать и отправлять данные по USB. Ну получу я ссылку на объект, что это даст. Тогда объект должен решать задачу. А как он это сделает? Получит ссылку на другой объект, а тот на третий, на 4, 5 и т. д. Задачу это не решит.
Нет. Это делается через сериализацию объекта. В COM для этого существуют множество реализаций IStream интерфейса. Нужно отправить объект как сырые данные? Ок. Заводим PropertyBag в который сохраняем наш объект, и получаем бинарные сериализованые данные которые передаем куда угодно, или записываем в файл состояние объекта. Это только один из множества вариантов как это можно сделать на VB6.

Цитата Сообщение от locm Посмотреть сообщение
Что сложного? Делим программу на множество отдельных модулей. Работаем с памятью в пределах этого модуля и вероятность ошибки минимальна.
Сложного ничего, это небезопасно и почти никогда не нужно если придерживаться концепции безопасного программирования в VB6.

Цитата Сообщение от locm Посмотреть сообщение
То есть задачи выходящие за пределы концепции, не решить в VB?
Почему? Я же выше написал уже, если нужно - пользуйтесь, никто не запрещает, только следите за всем сами под свою ответственность.

Цитата Сообщение от locm Посмотреть сообщение
Если посмотреть проекты в вашем блоге, можно найти множество где производится работа с памятью? Как же концепция безопасного программирования?
Во-первых, я использую это в большей степени при работе с WinAPI, потому что он в большинстве своем не поддерживает такую концепцию. Если ты внимательно читал, то где можно я конечно же придерживаюсь концепцией безопасного программирования, к примеру вместо получения сырых указателей на объекты, я использую непосредственно ссылки и компилятор сам следит за жизнью объектов, бываю конечно исключения, но они скорее всего связаны со смешиванием безопасного кода и WinAPI, а также в некоторых случаях с производительностью.
Во-вторых, я не являюсь программистом с которого возможно нужно брать пример. Есть куча безопасных аналогов того как можно сделать вещи которые делаю я придерживаясь концепции безопасного программирования VB6. Я просто почти не использую дополнительные библиотеки (в проекта в своем блоге) которые специально предназначены для этого и которые многократно ускоряют разработку приложений на VB6. К примеру vbRichClient5, VBCorLib библиотеки содержат огромное количество готовых вещей и тебе при использовании их возможно ни разу не придется обратиться к WinAPI.

Цитата Сообщение от locm Посмотреть сообщение
Речь шла про ссылки. Я ведь выделил это.
Это не задача, ты уже непосредственно говоришь работать с сырой памятью. Сам не видишь что это несогласуется с концепцией? В VB6 это бы гипотетически выглядело так - выделить массив в 100 элементов и 18-м элементом записать объект хранящий значение к примеру 10000.

Цитата Сообщение от locm Посмотреть сообщение
Документированные?
Нет, но если хочется документорованного то используй CopyMemory. Разницы нет, только в первом случае это более эффективно.

Цитата Сообщение от locm Посмотреть сообщение
Если нет опыта, многое в программировании может привести к ошибкам.
Вот именно, а в VB6 чтобы выстрелить себе в ногу придерживаясь концепции безопасного программирования нужно очень постараться. Поэтому концепция и безопасная. Другое дело что большинство задач с указателями можно решить в этой концепции.

Цитата Сообщение от locm Посмотреть сообщение
MS слишком сильно заботится и ладно если о пользователях, но они решили заботится о программистах считая их домохозяйками, отсюда много ограничений.
Нет. Почитай пожалуйста о COM и о его работе с многопоточностью, сколько там ньюансов и ограничений. VB6 поддерживает многопоточность в модели STA, соответственно он и следует этим праилам.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 17:18
Цитата Сообщение от The trick Посмотреть сообщение
И где тут LocalAlloc?
Не вопрос, можно переписать с использованием LocalAlloc
PureBasic
1
2
*mem = LocalAlloc_(#LMEM_MOVEABLE, 100)
PokeQ(*mem+18, 0)
Цитата Сообщение от The trick Посмотреть сообщение
Если WinSock/MSCOMM контролы которые люди используют не один десяток лет уже, я не говорю даже о непосредственном использование WinAPI.
А в них по вашему как осуществляется прием и передача? Тоже полностью безопасными методами?

Цитата Сообщение от The trick Посмотреть сообщение
Нужно отправить объект как сырые данные? Ок. Заводим PropertyBag в который сохраняем наш объект, и получаем бинарные сериализованые данные которые передаем куда угодно, или записываем в файл состояние объекта.
Как это скажется на производительности и объеме требуемой памяти?

Цитата Сообщение от The trick Посмотреть сообщение
В VB6 это бы гипотетически выглядело так - выделить массив в 100 элементов и 18-м элементом записать объект хранящий значение к примеру 10000.
В примере выделяется сто байт (байтовый тип массива) и по смещению 18 записывается 8-ми байтное значение. Это всего лишь пример. Зачем нужно? Допустим нужно передать данные микроконтроллеру по USB и их нужно как-то упаковать. Я обычно для этого использую структуры. Задачу облегчает то что в x86-x64 и ARM Cortex-M структуры совместимы по расположению данных. Т. е. заполнили структуру и отправили. В МК поместили принятые данные в структуру и причитали то что отправили.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 17:36
Цитата Сообщение от locm Посмотреть сообщение
Не вопрос, можно переписать с использованием LocalAlloc
Так и не увидел преимуществ перед способом который описал я.

Цитата Сообщение от locm Посмотреть сообщение
А в них по вашему как осуществляется прием и передача? Тоже полностью безопасными методами?
Да.

Цитата Сообщение от locm Посмотреть сообщение
Как это скажется на производительности и объеме требуемой памяти?
Да почти никак, если говорить о текущих реалиях. Не так часто нужно отправлять гигабайты объектов через сериализацию. На транспортировку по каналу уйдет больше времени чем на сериализацию.

Цитата Сообщение от locm Посмотреть сообщение
В примере выделяется сто байт (байтовый тип массива) и по смещению 18 записывается 8-ми байтное значение. Это всего лишь пример. Зачем нужно? Допустим нужно передать данные микроконтроллеру по USB и их нужно как-то упаковать. Я обычно для этого использую структуры. Задачу облегчает то что в x86-x64 и ARM Cortex-M структуры совместимы по расположению данных. Т. е. заполнили структуру и отправили. В МК поместили принятые данные в структуру и причитали то что отправили.
Я уже написал как это делается через сериализацию. Создаешь Stream пишишь в него как в файл, затем извлекаешь данные. Безопасно и гибко. В качестве Stream'а может быть любая логика в которую также можно обернуть последовательный порт или что-то еще.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 17:57
Цитата Сообщение от The trick Посмотреть сообщение
В любом случае это небезопасно.
В случае памяти отладчик сообщит о выходе за пределы допустимого значения.
Миниатюры
Быстрый старт в изучении C++ для относительно опытных программистов Basic  
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
27.04.2020, 18:37  [ТС]
Цитата Сообщение от Power_Basic
... оглядываясь назад, и мне тоже всё кажется очень простым. Всего 5 WINAPI функций пришлось использовать в конечном итоге. А когда только начинал во всём этом материале (по PDH) разбираться, было реально сложно понять, какие именно функции надо использовать. Их же там очень много.
Цитата Сообщение от The trick Посмотреть сообщение
А что документация MSDN говорит на этот счет? Количество функций не говорит в общем случае ни о чем. Равносильно теже самые функции использовать в каком-нибудь C - количество функций от этого не изменится. Это не аргумент.
Проблема в том, что документация говорит слишком много и в результате "за деревьями не видно леса".
То же самое и с подключением словарей в SAPI_5.4.
Написано много, а вот как конкретно подключить словарь к движку непонятно.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 21:08
Цитата Сообщение от locm Посмотреть сообщение
В случае памяти отладчик сообщит о выходе за пределы допустимого значения.
? Что я делаю не так?

Как видишь никаких предупреждений нет.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Проблема в том, что документация говорит слишком много и в результате "за деревьями не видно леса".
То же самое и с подключением словарей в SAPI_5.4.
Написано много, а вот как конкретно подключить словарь к движку непонятно.
А причем тут VB6? Если ты не можешь разобраться с каким-либо API, то это не проблема языка. Тоже самое у тебя было-бы к примеру с C. Причем тут какие-то сложности работы с API из VB я не могу понять?
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 21:23
Цитата Сообщение от The trick Посмотреть сообщение
Что я делаю не так?
Нужно включить Porifier.
Миниатюры
Быстрый старт в изучении C++ для относительно опытных программистов Basic  
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
27.04.2020, 21:35  [ТС]
Цитата Сообщение от Power_Basic
Проблема в том, что документация говорит слишком много и в результате "за деревьями не видно леса".
То же самое и с подключением словарей в SAPI_5.4.
Написано много, а вот как конкретно подключить словарь к движку непонятно.
Цитата Сообщение от The trick Посмотреть сообщение
А причем тут VB6? Если ты не можешь разобраться с каким-либо API, то это не проблема языка. Тоже самое у тебя было-бы к примеру с C. Причем тут какие-то сложности работы с API из VB я не могу понять?
Нет, в данном случае имелись в виду общие сложности, без привязки к конкретному языку. А чтобы разобраться в этих сложностях, хорошо бы понимать примеры, написанные в докуметации MSDN на С и С++. Ну этому же, собственно говоря, и посвящена вся эта ветка.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 21:40
Цитата Сообщение от locm Посмотреть сообщение
Нужно включить Porifier.
Не помогает:
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 21:41
Цитата Сообщение от Power_Basic Посмотреть сообщение
А чтобы разобраться в этих сложностях, хорошо бы понимать примеры, написанные в докуметации MSDN на С и С++.
Так вопрос стоял в том как раз в чем проблемы конкретно с пониманием этого, а не с пониманием API.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,005
Записей в блоге: 7
27.04.2020, 22:00
А если переопределить настройки?
PureBasic
1
2
3
PurifierGranularity(1, 1, 1, 1)
*mem = AllocateMemory(100)
PokeQ(*mem + 99, 0)
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.04.2020, 22:07
Цитата Сообщение от locm Посмотреть сообщение
А если переопределить настройки?
Без разницы:

Такие ошибки очень трудно найти, поэтому ручное управление памятью небезопасно.
Представь что к примеру по тому смещению куда я записал значение, какие-то важные данные, и падение не произошло? Может случится все что угодно, вплоть до потери всех данных в приложении или нарушение работы системы, да вообще все что угодно. Данную уязвимость могут эксплуатировать злоумышленники и украсть у тебя пароли/деньги/и т.д.
А теперь попробуй вот также вот, придерживаясь концепции безопасного программирования) проделать все тоже самое в VB6.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
27.04.2020, 22:55  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Так вопрос стоял в том как раз в чем проблемы конкретно с пониманием этого, а не с пониманием API.
Да ладно, нормально всё. Просто мы не поняли друг друга. Так случается иногда при "заочном" общении.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
27.04.2020, 23:49
Цитата Сообщение от The trick Посмотреть сообщение
Такие ошибки очень трудно найти, поэтому ручное управление памятью небезопасно.
Это ошибка программиста. Если он напишет кривой код - это означает только одно, что он лоханулся
и не формализовал задачу заранее(потому что мне не понятно как можно сделать всё по науке и
криво вбить потом в код, это редкая халатность). По той же самой причине(по криворукости) неверный
алгоритм может также не дать сбой и на обычных структурах языка, а потом выдать себя на важных данных.
В указатели просто так не лезут, это всегда кастомная структура данных и всегда какие-либо
требования к оптимизации кода. Поэтому вся эта "безопасность" - человеческий фактор.
Не стал бы лезть в указатели например, ради того, что можно сделать на простых массивах.
Потому что массивы есть везде и на них можно строить более простой и независимый от ЯП код.
Но например, если нужно сделать быстрый обсчёт разношёрстных данных и хочется, чтобы оно ещё и
быстро работало, тут придётся возиться с указателями. Потому что доступ к массиву, например,
будет внутри себя делать умножение(если структура нестандартного размера), а посредством указателя
можно пройтись точечно по нужным полям, просто прибавляя к указателю необх. значение. Или заменить
умножение комбинацией битовых сдвигов или таблицы. В ряде случаев просто предпочту указатели,
хоть и радости в возьне с ними крайне мало.

Тут ещё был диалог про пользователя.
Так вот, поймите мужики, пользователю по хорошему до фени все эти фреймворки фигеймворки, рантаймы, dll-ы
и прочее барахло. Он выкачивает архив и хорошо если там один файлик с именем install.exe или аналогичное
куда надо ткнуть и получить результат, а не помойка из dll и прочих разных файлов в корне, с кучей непонятных
экзешников и т.п., да ещё и где-то в разных папках(или вообще не упомянутое) лежит то, что надо установить
руками, что потребует времени, место на диске(которого может не быть) и бог знает чего ещё, вплоть
до прав админа и доступа к интернету. Тут можно конечно сказать "не ипёт" хочет использовать, пусть соответствует.
Но лично сам предпочитаю щедящий подход:
Т.е. когда пользователю для работы приложения нужна лишь ОС, с корректно поставленными драйверами,
начиная от 2000\XP и выше. Особенно если софт не требует каких-то специфических возможностей либо
конкретных ОС, либо конкретной библиотеки. А не просто ради прихоти разработчика(мол вот тут быстрее и
безгеморнее разработать).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2020, 23:49

набор опытных C++ программистов
Большой иностранный банк проводит набор опытных C++ программистов для IT-департамента своего московского офиса. Необходимы кандидаты с...

Приглашаю На работу Опытных Программистов
Всем привет . Я ищю Хороших программистов для работы над Онлайн игрой ( в типе neverlands) От вас Требую одно хорошую ...

Нужен совет опытных программистов на C#
Всем добрый день! Я здесь абсолютно новенький! Так что прошу сразу не кидать камнями если задаю вопросы не там где нужно! :) Совсем...

Нужен совет опытных программистов
Задача: Написать систему логирования LS кода, подсчета производительности (как долго исполняется LS код) и учета ошибок. Цель: получить...

Требуется совет опытных программистов
Основы С++ более менее изучены. Что же дальше? Что учить чтоб писать хоть какие то простенькие прикладные программы?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые алгоритмы, которые не западно ориентированной философии кода, без уведомлений и объяснений.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru