Вызов VB процедур из Asm-вставки.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Вызов VB процедур из Asm-вставки.

Сообщение 0xy » 17.12.2009 (Чт) 5:28

Зачем закрыли старую тему? vievtopic.php?f=51&t=41205
Впрос в заглавии, ИХМО, был достаточно конкретным. Попробую объяснить еще подробнее :)
Прога на VB (или даже форма в Accese) обрабатывает большой файл (сотни Мб или даже Гигабайты) посредством Asm-процедуры(вставки), блоками по 16 М и более. Т.е. до окончания обработки блока, код не возвращается в VB, а хотелось бы обновлять прогресбар и вообще делать DoEvents (особенно в Accesse :) )
В связи с этим возник вопрос: можно ли узнать адрес процедуры (самописной, из модуля формы), и вызывать ее из Asma?

Или: есть ли альтернатива DoEvents?

По-хорошему, наверное нужно запускать Asm отдельным потоком, но лень заморачиваться с синхронизацией...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Вызов VB процедур из Asm-вставки.

Сообщение alibek » 17.12.2009 (Чт) 8:53

Тебе не сюда. Переношу.
Предупреждение.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Вызов VB процедур из Asm-вставки.

Сообщение Antonariy » 17.12.2009 (Чт) 11:48

можно ли узнать адрес процедуры
AddressOf, только она должна быть в обычном модуле.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Вызов VB процедур из Asm-вставки.

Сообщение Хакер » 17.12.2009 (Чт) 12:21

0xy писал(а):Впрос в заглавии, ИХМО, был достаточно конкретным.

Ты серьёзно думаешь, что вопрос "Вызов VB процедуры из Asm-вставки??" достаточно конкретен?
Тогда вот тебе мой предельно конкретный вопрос: "Чесание правого уха левой рукой??". Требую дать исчерпывающий ответ.

(самописной, из модуля формы), и вызывать ее из Asma?

Просто процедуры, можно, Antonary сказал как. Метод-член формы тоже можно вызвать, но хватит ли у тебя упорства на такой вызов?

Или: есть ли альтернатива DoEvents?

PeekMessage->TranslateMessage->DispatchMessage. Это если надо быстро. А если не надо, то DoEvents делает то же самое в числе прочего.

По-хорошему, наверное нужно запускать Asm отдельным потоком, но лень заморачиваться с синхронизацией...

Шутишь? Какая там синхронизация? Послать сообщение главному потоку о завершении обработки файла?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Вызов VB процедур из Asm-вставки.

Сообщение 0xy » 18.12.2009 (Пт) 1:20

Можно по подробнее об AddressOf?

Хакер
Да, шучу :) Просто интересно сделать одним потоком.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Вызов VB процедур из Asm-вставки.

Сообщение Хакер » 18.12.2009 (Пт) 1:23

Делать одним потоком такие задачи --- глупость. Потоки отчасти для того и сделаны, чтобы один поток занимался UI, а другой в поте лица считал интегралы, и всё это вместе не выглядело как зависший недокалькулятор.

AddressOf это квази-оператор, возвращающий VA указанной внутримодульной процедуры. Для вызова метода-члена формы он не нужен, там нужно получить IDispatch и узнать DispId нужного метода. Т.к. формы используют связывание по DispId-у. Можно, наверное, попробовать назначит свой DIspId методу в Procedure Attributes.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Вызов VB процедур из Asm-вставки.

Сообщение Antonariy » 18.12.2009 (Пт) 11:21

0xy писал(а):Можно по подробнее об AddressOf?

Код: Выделить всё
ret = CallAsmFunc(AddressOf MyFunction)
Ключевое слово AddressOf может использоваться только перед параметром функции. Если тебе нужно получить адрес в переменную, то используй такой способ:
Код: Выделить всё
addr = ResolveAddress(AddressOf MyFunction)

Function ResolveAddress(addr as Long) as Long
    ResolveAddress = addr
End If
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Вызов VB процедур из Asm-вставки.

Сообщение Хакер » 18.12.2009 (Пт) 11:27

Только ByVal надо, а то лишняя стекотряска.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 10

    TopList