Страница: 1 |
Страница: 1 |
Вопрос: И еще раз String Stream
Добавлено: 10.09.04 12:31
Автор вопроса: Dark Engine | Web-сайт:
Все, что мне стало известно об ограничениях системы Windows напрочь мешает мне. Этот вопрос уже задавался, однако ответ был отрицательным. А вопрос таков: как программно переслать большую строку в параметр вызываемой программе. Мне необходимо знать, есть ли в АПИ функция, позволяющая это, и как она выглядит (библиотека,объявление и, если можно, комментарии)
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 10.09.04 17:49
Может это Павел с ботами балуется?
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 10.09.04 18:24
Я извращался таким образом: делал textbox с visible=False, загонял в него строку, а в качестве параметра передавал вызываемой программе textbox.hWnd. В вызываемой программе считывал textbox.hWnd из командной строки и по этому значению через GetWindowText получал саму строку.
Но это если вызываемая программа написана тобой.
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 10.09.04 18:38
Я ему в прошлый раз похлеще пример давал. Передаёшь в вызваемый модуль адрес переменной и её длину, а в нём через ReadProcessMemory читаешь строку.
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 10.09.04 21:42
Текстбокс может ещё и обратно какие-либо сообщения принимать, если надо.
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 10.09.04 23:05
cresta,
Ну как, разобрался с vTable? Может и мне подскажешь?
http://bbs.vbstreets.ru/viewtopic.php?t=9606
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 11.09.04 00:46
Нет, уперся в тип variant, как с ним в asm'е работать - не знаю, пока отложил.
Я никак не пойму, что ты хочешь с этим классом делать? Обращаться к методам формы через QueryInterface? Ну из VB обращаться asm вставке понятно, а наоборот для чего? Или чтоб запутано было В целях конспирации Типа зашел во вставку, из неё втихаря вызвал другую и потом вернулся?
"А Form это IUnknown или IDipatch?" - по идее чтобы получить указатель на IUnknown для формы через QueryInterface, нужно передать CLSID com-объекта, к которому она принадлежит, и QueryInterface вернёт указатель ptrIUnknown. Первый дворд по этому адресу - есть адрес vTable, в которой содержатся указатели на все интерфейсы данного класса.
mov eax,ptrIUnknown
mov eax,[eax]-в eax адрес таблицы интерфейсов
Далее по первому дворду этой таблицы - адрес процедуры для получения первого интерфейса (может быть несколько интерфейсов в одном сом-объекте)
mov eax,[eax] - теперь здесь адрес процедуры, которая вернёт тебе указатель на конкретный интерфейс.
теперь:
push offset ptrInterface - сюда процедура положит retval
push offset IID_Interface - ID запрашиваемого интерфейса
push ptrIUnknown
Call eax - по адресу из vTable объекта
если процедура заполнит ptrInterface нулём - ты пролетел, если нет, там будет указатель на конкретный запрошеный тобой интерфейс. Первый дворд по адресу, содержащемуся в ptrInterface - это адрес vTable данного интефейса.
Опять делаем
mov eax,ptrInterface
mov eax,[eax] - адрес таблицы интерфейса
А вот дальше - 2 варианта: либо мы имеем в eax адрес первого метода интерфейса, либо нужно еще от значения в eax пропустить 3 дворда(для QueryInterface, AddRef и Release) и четвёртый дворд - адрес первого метода. Я больше склоняюсь к тому, что 2 вариант. В общем я на этом месте опух. (( Передаю тебе эстафету, пусть теперь CyRax опухнет
В общем посмотрел я на это дело, и сильно зауважал msvbvm. От таких извращений избавляет.
Целый час писал пост ((
Номер ответа: 7
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #7
Добавлено: 11.09.04 00:50
Да и ещё, забыл:
"А Form это IUnknown или IDipatch?" - может ошибаюсь, но кажется IUnknown - это указатель на com-объект в целом, а IDipatch - это конкретный интерфейс, т.е. твоя форма
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 11.09.04 13:55
Есть часть информации о типе Variant
Длина его 16 байт.
2 байта типа + 6 неиспользуемых байт + 4 байта указателя
О последних 4 байтах у меня информации нет.