|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|
Как работать с потоками IStream в Visual Basic 616.11.2024, 18:08. Показов 13632. Ответов 206
Метки нет (Все метки)
Всем привет! Я недавно узнал о таком чуде как потоки IStream, это такие данные в оперативной памяти вашего процесса EXE типа байтовых массивов только круче. Как я это понял лично. Вот мне очень интересно стало поработать именно со стримами. Если у кого-то есть какие-то наработки в этом плане буду рад, если поделитесь.
Из того, что я пока узнал: Есть API для создания, чтения и записи стримов - это функции SHCreateMemStream, IStream_Write, IStream_Read и IStream_Size. Это конечно очень интересно всё, но я не нашёл функции для позиционирования IStream_Seek (её что не существует?). Есть возможность управлять стримами через объявления в TLB, однако мне эта тема не интересна, так как я не люблю подключать всякие там TLB. Есть возможность управлять потоками IStream через специальную функцию DispCallByVtbl Хотелось бы подробно разобрать эту тему и научиться: 1. Создавать поток IStream 2. Записывать 3. Считывать 4. Позиционировать
0
|
|
| 16.11.2024, 18:08 | |
|
Ответы с готовыми решениями:
206
Как работать с камерой в Visual Basic Как работать в Visual Basic'е с реестром? Как работать с таблицами Ecxel в Visual Basic? |
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|||
| 17.11.2024, 04:30 [ТС] | |||
|
testuser2, слушай ты скачай мою программу-пример да посмотри, там же всё понятно
Добавлено через 1 минуту Seek это указатель текущего положения чтения или записи. Добавлено через 1 минуту Добавлено через 54 секунды Offset там где ты спрашивал это Seek Добавлено через 1 минуту Но как узнать его текущее положение этого Offset я сам не знаю. Знаю лишь что он становится сразу на конец файла, после загрузки, и поэтому операция Read уже не работает (я тоже не сразу в этом разобрался) пока снова не отпозиционируешь Sekk.
0
|
|||
| 17.11.2024, 04:46 | |
|
Я, кстати, перепутал, нужен не offset, а index это цифра 5, а смещение именно метода там вычисляется как lIndex * PTR_SIZE. Это номер метода по счету в таблице v-table. Я, кстати, че-то маленько делал, т.е. я брал один громоздкий код Трика, который сканирует в-табле и выдает все методы объекта. И вроде бы у меня получилось узнавать номера методов, но не получилось их вызывать. Мене просто интересно, если вызывать метод объекта с помощью DipCallFunk это быстрее или нет.
1
|
|
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|||||
| 17.11.2024, 05:04 [ТС] | |||||
|
Добавлено через 1 минуту Добавлено через 47 секунд Добавлено через 8 минут testuser2, я нашёл полезную информацию про тему которую ты спрашиваешь: https://www.vbforums.com/showt... -is-faster
1
|
|||||
| 17.11.2024, 07:37 | ||
|
Добавлено через 31 минуту Вот есть чудесня прога The trick-а для просмотра информации о библиотеки, там не хватает только нумерации мемберов..
1
|
||
|
Модератор
|
||
| 17.11.2024, 08:48 | ||
|
HackerVlad, я же говорю сам себе проблему придумал - сам решил. В справке по функции все детально описано:
Добавлено через 14 минут testuser2, DispCallFunc - это очень медленный метод вызова, т.к. для него нужно все параметры переводить в Variant. Получается 2 конвертации туда сюда + возвращаемое значение. Поэтому его только в крайних случаях желательно использовать типа вызова по указателю.
1
|
||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
||||
| 17.11.2024, 12:12 [ТС] | ||||
|
Добавлено через 1 минуту В справки эти ленивые майкры не описали номера для других функций, хотя могли бы Добавлено через 1 минуту Добавлено через 30 минут
0
|
||||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
||
| 17.11.2024, 14:12 [ТС] | ||
|
Добавлено через 1 минуту Я могу конечно сделать код, который будет только для XP вызывать по номерам (иначе там просто ну никак!!!) а в более новых виндах по именам. и такое могу. но думаю нужно ли это. если номера во всех виндах совпадают. Добавлено через 1 минуту если бы у меня был хоть один пример того что номера этих моих функций ну хоть где-то будут не совпадать. а то везде же совпадают, я думаю. Добавлено через 44 секунды у меня Windows 64 битный я проверял и на Windows 32 битном тоже проверял везде эти номера совпали Добавлено через 59 секунд Вы все такие перестраховщики ей Богу я в шоке просто, просто пустые слова, без доказательств, что эти номера где-то могут не совпасть. А если они везде совпадают? Вы об этом не думали? Добавлено через 50 секунд Конкретно для моих функций я имею ввиду конечно.
0
|
||
| 17.11.2024, 14:18 | |||
|
Добавлено через 3 минуты Я еще вот чего не понимаю, пишут, что типа через номера вызов идет чуть быстрее. Просто также наверное не должно быть, там что при вызове каждый раз участвует текстовое имя функции, компилятор же так не должен работать?
0
|
|||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|
| 17.11.2024, 14:18 [ТС] | |
|
Ну может в других функциях номера и не совпадают, но меня интересуют только конкретно мои 4 функции
1. IStream_Read - 184 2. IStream_Write - 212 3. IStream_Size - 214 4. IUnknown_AtomicRelease - 169 И я уверен что номера в них совпадают везде во всех Windows и во всех битностях винды. А битность моего процесса ну никак не может быть 64.
0
|
|
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|||
| 17.11.2024, 14:21 [ТС] | |||
|
Добавлено через 29 секунд Добавлено через 1 минуту 32-битный мой процесс работает ни чем не хуже чем 64-битный, поверь по скорости почти ничем не отличается, всё так же быстро у меня будет работать. тогда вопрос: а зачем мне вообще 64. просто нет смысла и всё.
0
|
|||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
||
| 17.11.2024, 14:47 [ТС] | ||
|
testuser2, понимаешь The Trick всегда чётко следует документации, вот там написали только для функции SHCreateMemStream что нужно по номеру 12 вызывать для совмести со всеми виндами, вот он и следует чётко этой инструкции от майкрософта. А так как в описании других функций не написано что нужно по номерам вызывать для совместимости, то он считает уже что мол категорически не стоит этого делать. Однако, я уверен, если бы бы в документации майкры, не поленились бы, и написали бы для других функций IStream_Read, IStream_Write что нужно вызывать по номерам для совместимости со старыми версиями винды, то The Trick говорил бы совсем иначе. Уже не осуждал бы меня и говорил бы что да нужно по номерам эти функции вызывать. А я считаю что в майкрософте просто поленились написать об этом и всё. А хотя стоило бы в документации указать ни только для SHCreateMemStream что нужно вызывать по номеру для XP но и для других функций IStream_Write, IStream_Read, IStream_Size
Добавлено через 2 минуты testuser2, а я вот не люблю всегда чётко следовать документации и инструкциям. Добавлено через 17 минут Вот вы все используете функцию SHCreateMemStream а почему в ваших TLB нет такого метода создания стрима? Почему вы используете API функцию? Почему в майкрософте не сделали такого метогда в интерфейсе IStream для создания потока? Почему только функция из API для этого есть? Если уже и делать было бы, по логике, то либо всё на API либо всё на ваших методах интерфейса без АПИ.
0
|
||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
||
| 17.11.2024, 15:01 [ТС] | ||
|
testuser2, да плевать мне на другие функции вообще, пусть там номера и не совпадают, а ты возьми конкретно мои 4 функции проверь
1. IStream_Read - 184 2. IStream_Write - 212 3. IStream_Size - 214 4. IUnknown_AtomicRelease - 169 Уверен, всё будет прекрасно совпадать. Просто если ЕСТЬ название то я всегда сам вызываю по названиям. А если названия функции ну тупо ну просто нету!? То куда деваться тогда!? Приходится и вызывать по номеру! Хотябы ради ХР! Добавлено через 1 минуту Добавлено через 2 минуты Вообще это конечно неправильно было со стороны майкрософт делать безымянные функции в библиотеках по номерам. Я считаю что это неправильно вообще, если бы я делал систему я бы требовал имя обязательно. А то как это так это вообще что функция без имени. Бред. Добавлено через 1 минуту Прикинь если бы людей так называли ни Костя там, ни Артур, а например 568 или 469 иди сюда. Смешно. Пхахахах Сразу вспомнил сериал кстати где была девочка по имени 11.
0
|
||
| 17.11.2024, 15:10 | |||
|
Добавлено через 1 минуту Добавлено через 4 минуты Кстати если в Листере тоталовском смотреть, то видно эти функции (IStream_Read, IStream_Write), но также видно и безымянные ординалы, которые там тоже есть
1
|
|||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
|
|
| 17.11.2024, 15:34 [ТС] | |
|
0
|
|
|
|
|||||||
| 17.11.2024, 16:10 | |||||||
|
Ядро 64 бит, процесс 32 бит. Нужна прослойка которая требует ресурсов компа. 32 бит - нужна прослойка и ограничение по памяти. Как предлагаете вызывать метод из несуществующего интерфейса?![]() Если интерфейс создаете вы, нужно написать реализацию всех методов и др. что требуется. Попробуйте и может получится.
0
|
|||||||
| 17.11.2024, 16:10 | |
|
Можно ли научится работать ASP.NET на основе Visual Basic Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ? Вычисление значений функции двух переменных в Visual Basic - Visual Basic
Как работать с потоками? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|