Страница: 1 |
Вопрос: MemSet | Добавлено: 25.08.04 16:59 |
Автор вопроса: ![]() |
В сях есть функция memset
Чем её можно заменить в VB? |
Ответы | Всего ответов: 13 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 25.08.04 17:48 |
Если у тебя строка, то ты сможешь зарезервировать в ней место с пом.:
str = String$(NumOfBytes, bCharacter) Если байтовый массив, то это тубе ReDim btArray(numOfByte) А вообще, люби АПИ и работай с ними ![]() HeapAlloc, HeapReAlloc, HeapFree, вот ![]() |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #2 | Добавлено: 25.08.04 18:03 |
Так я и пытаюсь найти аналог в апях.
Использовал CopyMemory - вылетел VB Вот этот код: Private Type ButtonIcon himl As Long margin As RECT uAlign As Long End Type -- Dim bi As ButtonIcon Dim lLenght As Long lLenght = Len(bi) CopyMemory bi, ByVal 0&, lLenght В Си он выглядит так: struct { HIMAGELIST himl; // Index: Normal, hot, pushed, disabled, focused. RECT margin; // Margin around icon. UINT uAlign; } bi; memset(&bi, 0, sizeof(bi)); Может из меня переводчик никудышный ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #3 | Добавлено: 25.08.04 18:03 |
P.S. Пытаюсь добавить иконку на кнопку |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 25.08.04 18:43 |
пропускай эту строку...
можешь написать за место ее: dim bi as ButtonIcon, и дельше работать... Надо будет взять указатель, используй VarPtr(bi) |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 117 Ответов: 1538 |
Профиль | Цитата | #5 | Добавлено: 25.08.04 19:01 |
Немного уточню: в Си &bi - это указатель на структуру. В VB указателем будет retval от VarPtr. Т.е. в CopyMemory надо передавать адрес переменной в памяти (указатель на её начало). |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #6 | Добавлено: 25.08.04 22:53 |
Что-то ничего не получается у меня.
Перевел с си код, который должен добавлять ImageList с картинками к кнопке - а результат нулевой... Посмотрите, кому не лень - что не так? Public Function Button_SetIcon( _ ByVal hButton As Long, _ ByVal hModule As Long, _ ByVal szIcon As String, _ Optional cx As Integer = 32, _ Optional cy As Integer = 32, _ Optional fuLoad As Long = LR_DEFAULTCOLOR) As Boolean ![]() ![]() ![]() Button_SetIcon = False hIcon = LoadImage(App.hInstance, "c:\1.ico", IMAGE_ICON, cx, cy, LR_LOADFROMFILE) bi.himl = ImageList_Create(cx, cy, ILC_COLOR16 Or ILC_MASK, 4, 0) bi.uAlign = 4 lRetval = ImageList_Add(bi.himl, hIcon, 0) lRetval = ImageList_Add(bi.himl, hIcon, 0) lRetval = ImageList_Add(bi.himl, hIcon, 0) hIconBlend = ImageList_GetIcon(bi.himl, 0, ILD_BLEND50 Or ILD_TRANSPARENT) lRetval = ImageList_Add(bi.himl, hIconBlend, fuLoad) lRetval = DestroyIcon(hIconBlend) hIconBlend = ImageList_GetIcon(bi.himl, 3, ILD_BLEND50 Or ILD_TRANSPARENT) lRetval = ImageList_Remove(bi.himl, 3) lRetval = ImageList_Add(bi.himl, hIconBlend, 0) lRetval = DestroyIcon(hIconBlend) lRetval = ImageList_Add(bi.himl, hIcon, 0) lRetval = SendMessage(hButton, BCM_FIRST Or BCM_SETIMAGELIST, ByVal 0&, bi) If lRetval = 0 Then lRetval = ImageList_Destroy(bi.himl) lRetval = SendMessage(hButton, BM_SETIMAGE, IMAGE_ICON, hIcon) Else lRetval = DestroyIcon(hIcon) lRetval = SetWindowText(hButton, "" ![]() End If Button_SetIcon = lRetval End Function |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 25.08.04 23:52 |
>CopyMemory bi, ByVal 0&, lLenght
Ты неправильно CopyMemory использовал. У тебя адрес источника ноль, а должно быть имя источника или ByVal его адреса. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 26.08.04 00:01 |
пробуй ZoroMemory если хочешь очистить и без того чистую память ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 26.08.04 08:01 |
А строки-то в Unicode, поэтому numOfBytes<>numOfChars, а в первом параметре функии String укаазывается именно количество символов. В Си из-за таких ошибок разные пакости вроде переполнения буфера бывают, слава богу VB от этого защищен изначально ![]() |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 26.08.04 08:13 |
Мое последнее сообщение - в ответ на первый ответ от sne. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 26.08.04 10:06 |
2Павел, при работе с АПИ (с отличительным значком "A" NOT "W"![]() |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 26.08.04 10:38 |
А причем здесь АПИ? Я вот о чем: ты подразумеваешь, что в numOfBytes - кол-во байт, судя по названию переменной. Однако, вот такой код: Dim Str As String Dim numOfBytes As Integer numOfBytes=5 Str = String$(numOfBytes, " ") MsgBox LenB(Str) сообщит нам, что на самом деле длина строкив байтах в 2 раза больше, чем numOfBytes. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 26.08.04 22:50 |
А при том что попробуй скопировать в байтовый массив строку, примерно таким способом:
redim bt (len(str) - vbnull) Call CopyMemory(bt(0), byval str, len(str)) А потом скажи мне, неужели тебе скопируется только половина строки, а все остальное запишется в незарезервированную обл. памяти, и вызовет ошибку ? Ты будешь не прав ![]() ![]() То что в VB в реале строки это wchar'ы, это я знаю, но при обращении к АПИ, формируется обычная строчка... |
Страница: 1 |
|