VarPtrArray

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

VarPtrArray

Сообщение A.A.Z. » 21.12.2004 (Вт) 19:51

Народ, что это за зверь? :roll: Или очередная "неточность" афтаров?
http://www.kinnet.ru/cterra/465/20942.html
Например, в Visual Basic есть такие НДФ, как VarPrt, VarPrtArray, VarPrtStringArray, ObjPrt и StrPrt.
1) Не Prt, а Ptr
2) "2" и "3" не видел :roll: Может, вы поясните мне? :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.12.2004 (Вт) 19:56

Бессовестный человек... Говорю же, 4 утра... :)

Вижу здесь отголоски не скажу чего :wink:
Функций таких, конечно, нет. Но я их, помнится, вводил :)

Код: Выделить всё
function StrArrPtr(arr() as string, optional byval ignoreme as long=0) as long
  getmem4 varptr(ignoreme)-4, varptr(strarrptr)
end function


См. статью, в общем :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 21.12.2004 (Вт) 20:01

Я твою статью 7 раз читал :) Я думал, что они про что-то встроенное писали :)

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: VarPtrArray

Сообщение codemaster » 24.12.2004 (Пт) 15:40

A.A.Z. писал(а):Народ, что это за зверь? :roll: Или очередная "неточность" афтаров?



Даже не смешно
:cry:
для начала cм.
http://support.microsoft.com/default.as ... -us;199824

+- сего действа поробно изложены в Technet

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.12.2004 (Пт) 16:13

Ха :)
Получается, я делаю то же самое, но без tlb :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 16:19

GSerg писал(а):Ха :)
Получается, я делаю то же самое, но без tlb :)
Но с дополнительными накладными расходами на вызов функции :!:
Имхо оба метода имеют свои преимущества и недостатки.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.12.2004 (Пт) 16:38

Не, всё-таки DllCallFunction вызывается один раз...
А потом идёт call eax...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 16:43

Да не, не может быть... Вот щас точно попробую и доложу о результатах.
(у тебя-то вызывается собственная функция, а не только отдекларенная? про накладные расходы на вызов собственных функций помнишь? хинт: qsort)
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.12.2004 (Пт) 16:45

Эээээ, батенька! :)
А вот это здесь не прокатит :)
Накладные расходы на вызов собственной недеклэренной функции не считаются, ибо все вызове в любой VB-программе обременены ими :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 16:52

Дело в том, что при объявлении VarPtrStrAry в TLB этих расходов удаётся избежать. "Если нет разницы, зачем платить больше?" (с)
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 16:57

GSerg писал(а):Не, всё-таки DllCallFunction вызывается один раз...
А потом идёт call eax...

действительно, jmp eax (as of VB6SP3) - для вызова "принял Long, вернул Long".
Сейчас для смеха попробую со строками...
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 17:04

Попробовал. По вызову __vbaStrToAnsi и __vbaFreeStr на каждый параметр, как и ожидалось.
Со структурами пробовать уже не буду - ломает.

Но всё равно, при объявлении через TLB всего этого нет! Ни при первом запуске, ни при каком!
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.12.2004 (Пт) 17:12

Строки, само собой, ага.
А если строки объявить как long, а передавать как strptr?
А при передаче в свои функции конверта нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 18:46

А про http://bbs.vbstreets.ru/viewtopic.php?p=80790#80790 что скажешь? В свою функцию-то, поди, не по jmp eax заход?

Тоже, что ли, скомпилировать и посмотреть...
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.12.2004 (Пт) 18:51

Да нафига?
Вопрос скорее философский :)

Понимаешь, создавать tlb, чтобы не вызывать свои функции - это моветон :)
Ты же не будешь брать пару метров исходника на VB и писать под него tlb, чтобы ускорить вызов каждой функции?
А вдруг будет???...

А заход в свою функцию, которая в модуле - це легко и просто, push и call [XXXXXXXX]. Иначе не работали бы всякие перезаписи типа SetFunction :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.12.2004 (Пт) 19:40

Ты, короче, не понял, в чём я тебя пытаюсь убедить... Завтра попытаюсь сформулировать это более явно.
Изображение

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 25.12.2004 (Сб) 22:06

За 2 дня успели целую страницу напостить :) Но ответ codemaster'а был самым исчерпывающим :) Спасибо! :)


Вернуться в Народный треп

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList