Создание переменной

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

Создание переменной

Сообщение Tarantul » 26.05.2005 (Чт) 19:46

Как в VB создать буфер определенной длинны и получить на него указатель (API функция ?). Другими словами, как найти замену обычному выражению
Dim Var as SomeType
И еще, как освободить выделленую память, если буфер уже не нужен?

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

Сообщение tyomitch » 26.05.2005 (Чт) 20:29

Код: Выделить всё
Dim b() As Byte
...
ReDim b(1024)
MsgBox VarPtr(b(0))
...
Erase b
Изображение

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 26.05.2005 (Чт) 20:33

Сразу видно человек пришел к нам из мира С++ и прямого кода... :lol: ИМХО
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 30.05.2005 (Пн) 12:58

На самом деле я не пришел из мира C++, а мне надо "вручную" создать строку, имея указатель на BSTR(Указатель на указатель), а BSTR указывает на массив символов, который, мне собственно, и нужно создать :)

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

Сообщение tyomitch » 30.05.2005 (Пн) 13:11

Tarantul, чем SysAllocString не подошла?
Или надо именно вручную?
Изображение

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 30.05.2005 (Пн) 14:04

Вполне подошла бы, просто я о этой функции не знал :( А можно о ней по подробнее?

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

Сообщение tyomitch » 30.05.2005 (Пн) 17:48

Изображение

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 30.05.2005 (Пн) 18:08

Самое веселое то, что пару минут назад сам докопался до описания SysAllocString, а заодно и до SysFreeString, и ради приличия, обновил этот форум:) . Но все равно спасибо :)

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 30.05.2005 (Пн) 18:48

Опять фигня :cry:

Вот моя функция:

Код: Выделить всё
Sub FormateStringAPI(lVarPtr As Long, Value As String)
Dim S As String
Dim m1 As Long

'Получаем указатель на строку
CopyMemory m1, ByVal lVarPtr, 4

'Нечего надеяться на самоудаление
SysFreeString m1

'Опять используем волшебную функцию
S = StrConv(SysAllocString(StrPtr(Value)), vbFromUnicode)

'Присваиваем указатель
CopyMemory ByVal lVarPtr, StrPtr(S), 4

End Sub


Она должна изменять строку, имея только лиш ее VarPtr. Все вроде хорошо, но после выхода из процедуры удаляется переменная S, а вместе с ней освобождается память, которая хранит нужную строку. Вот и получается, что при ближайшей возможности данные перезаписываются.
Причем моя цель - не использовать никаких внешних буферов. Может, опять какая - то API будет рулить :?:

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

Сообщение tyomitch » 30.05.2005 (Пн) 18:55

Хахаха! У тебя SysAllocString объявлена как As String? Переобъяви как As Long, и будет тебе щастье.
Конверсию в этом случае делай до вызова StrPtr, а не после.
Изображение

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 30.05.2005 (Пн) 22:34

Да работает нормально (пока что :) ). Кстати, а конверсия теперь не нужна вообще.


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], Yandex-бот и гости: 173

    TopList