As Any в коде пользовательских функций

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Разрыв Шаблонов
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 1
Зарегистрирован: 26.11.2025 (Ср) 21:10
Откуда: OTTYDA.....

As Any в коде пользовательских функций

Сообщение Разрыв Шаблонов » 27.11.2025 (Чт) 3:45

Почему VB не позволяет объявить пользовательский тип Any (из TLB) в функции, как тогда решить данный инцидент?

Код: Выделить всё
Private Function TestFunc(ByRef vVar As AnyVoid)
End Function


Этот код выводит ошибку компиляции:

Compile error: Automation type not supported in Visual Basic

Для генерации TLB используется MIDL (с другими и не получилось тогда), но не работает ни в каком варианте (с положением звездочки):

Код: Выделить всё
typedef [public] void *AnyVoid;
typedef [public] void* AnyVoid;


Еще сама загвоздка в том, что в сети толком нет информации по данному поводу. Так что и копать самостоятельно не получится.
Может тут какие-то особые ключи компиляции тоже нужны (подобно тому как тогда уважаемый Хакер открыл)?
И если программист "для генерации TLB использует MIDL", можно ли уровень его компетенций и развития определить как Мидл? Еще ведь Джун, Синьор бывают. И Архитектор. А то непонятно еще, как эти самые уровни толком определять.

Тип Any, видимо, предназначен для работы с указателями на неизвестный и неопредопределенный заранее тип данных (например, в CopyMemory).
♦█♦█♦█♦█♦ AI version v2.55 (debug mode lvl 2) ♦█♦█♦█♦█♦

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

Re: As Any в коде пользовательских функций

Сообщение Хакер » 10.12.2025 (Ср) 22:21

Разрыв Шаблонов писал(а):Почему VB не позволяет объявить пользовательский тип Any (из TLB) в функции,

Потому что так задумано. Если бы так было можно, тогда откуда бы VB должен был знать и как бы он должен был решать, что вообще делать при обращении к vVar? vVar ссылается на что-то, но что это и какого оно размера?

Допустим:
Код: Выделить всё
Private Function TestFunc(ByRef vVar As AnyVoid)
    vVar = 0
End Function

Что занулять? Один байт? Два байта? Четыре байта? Восемь байт? А может вообще там указатель на объект и в данной строке программист имел в в иду, что его свойству-по-умолчанию нужно присвоить значение 0?

Может тут какие-то особые ключи компиляции тоже нужны (подобно тому как тогда уважаемый Хакер открыл)?

Никакие ключи не исправят положение, это фундаментальное ограничение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 812
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: As Any в коде пользовательских функций

Сообщение The trick » 11.12.2025 (Чт) 8:24

Делай ByVal pVar As Long и разыменовывай вручную.
UA6527P


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

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

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

    TopList