С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 26.03.2020
Сообщений: 41

VB6. Как обойти ошибку Out of memory?

08.04.2020, 22:26. Показов 6269. Ответов 27

Студворк — интернет-сервис помощи студентам
Игры, программы, фильмы ..... имеют большие файлы разного формата. И я хочу, чтобы мой *.exe файл (мой проект) был большим. Я хочу в нём хранить и звуковые файлы, и рисунки, и всё что необходимо моему проекту для качественной работу в компьютере у пользователя. Если оперативной памяти мало, то пусть мой проект зависает как большие игры на слабых компьютерах. Почему всем можно, а мне нельзя? Почему ты запрещаешь мне?

Вот эти слова я много раз повторял Visual-у Basic-у 6.0, но он упёрся при компиляции *.exe файла и говорит мне:
Название: 08.07.jpg
Просмотров: 100

Размер: 15.2 Кб

Мне не удалось убедить то, что мне так нравится. Уважаемые программисты, может у Вас получится? Ведь на другой язык программирования я переходить не хочу.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2020, 22:26
Ответы с готовыми решениями:

Помогите, пожалуйста, обойти проблему: Out of memory
Помогите, пожалуйста, обойти проблему: = geotiffread('srtm_49_01.tif'); = geotiffread('srtm_49_02.tif'); ...

В моей программе на VB6 победить memory leak!
Имею такой bas модуль : Attribute VB_Name = "Proc" Option Explicit Dim y As Byte Const TH32CS_SNAPHEAPLIST = &H1 ...

Как обойти ошибку?
Может кто знает как обойти ошибку при вставке более 6000 записей? и в чем природа ошибки?

27
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38164 / 21099 / 4306
Регистрация: 12.02.2012
Сообщений: 34,687
Записей в блоге: 14
10.04.2020, 10:52
Лучший ответ Сообщение было отмечено Anti_All как решение

Решение

Студворк — интернет-сервис помощи студентам
Pro_grammer, Интернет велик... Загрузить картинку из памяти:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
''' Источник: http://www.vbforums.com/showthread.php?287495-load-a-picture-box-control-from-memory
 
Public Enum CBoolean   ' enum members are Long data types
  CFalse = 0
  CTrue = 1
End Enum
 
Public Const S_OK = 0    ' indicates successful HRESULT
 
Declare Function CreateStreamOnHGlobal Lib "ole32" _
                              (ByVal hGlobal As Long, _
                              ByVal fDeleteOnRelease As CBoolean, _
                              ppstm As Any) As Long
 
Declare Function OleLoadPicture Lib "olepro32" _
                              (pStream As Any, _
                              ByVal lSize As Long, _
                              ByVal fRunmode As CBoolean, _
                              riid As GUID, _
                              ppvObj As Any) As Long
 
Public Type GUID    ' 16 bytes (128 bits)
  dwData1 As Long      ' 4 bytes
  wData2 As Integer     ' 2 bytes
  wData3 As Integer     ' 2 bytes
  abData4(7) As Byte   ' 8 bytes, zero based
End Type
 
Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As GUID) As Long
 
Public Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
 
Public Const GMEM_MOVEABLE = &H2
 
Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
 
Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
 
Public Type OPENFILENAME  '  ofn
  lStructSize As Long
  hWndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  Flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type
 
Public Function PictureFromBits(abPic() As Byte) As IPicture  ' not a StdPicture!!
        Dim nLow As Long
        Dim cbMem  As Long
        Dim hMem  As Long
        Dim lpMem  As Long
        Dim IID_IPicture As GUID
        Dim istm As stdole.IUnknown '  IStream
        Dim ipic As IPicture
  
        ' Get the size of the picture's bits
 
100     nLow = LBound(abPic)
        
110     cbMem = (UBound(abPic) - nLow) + 1
  
        ' Allocate a global memory object
120     hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)
 
130     If hMem Then
    
            ' Lock the memory object and get a pointer to it.
140         lpMem = GlobalLock(hMem)
 
150         If lpMem Then
      
                ' Copy the picture bits to the memory pointer and unlock the handle.
160             MoveMemory ByVal lpMem, abPic(nLow), cbMem
170             Call GlobalUnlock(hMem)
      
                ' Create an ISteam from the pictures bits (we can explicitly free hMem
                ' below, but we'll have the call do it...)
180             If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then
190                 If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then
          
                        ' Create an IPicture from the IStream (the docs say the call does not
                        ' AddRef its last param, but it looks like the reference counts are correct..)
200                     Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, _
                                IID_IPicture, PictureFromBits)
          
                    End If   ' CLSIDFromString
                End If   ' CreateStreamOnHGlobal
            End If   ' lpMem
    
            '    Call GlobalFree(hMem)
        End If   ' hMem
      
    End Function
Новая версия моего кода (без временного файла):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub loadPic()
Dim BBuf() As Byte
 
    HomeDir$ = App.Path
    myName$ = App.EXEName + ".exe"
    
    fi% = FreeFile
    Open HomeDir$ + "\" + myName$ For Binary Access Read As #fi%
    
    LF& = LOF(fi%)         '::: Определяем собственную длину
    
    ttl$ = Space$(4)       '::: Буфер для сигнатуры
    
    Seek #fi%, (LF& - 3)   '::: становимся на начало сигнатуры
    Get #fi%, , ttl$       '::: читаем сигнатуру
    
    If ttl$ = "TAIL" Then  '::: Сигнатура правильная
    
       Seek #fi%, LF& - 7  '::: станем на поле длины
       Get #fi%, , LL&     '::: получили длину хвоста
       
       ReDim BBuf(1 To LL&) As Byte '::: буфер для чтения хвоста
       
       Seek #fi%, (LF& - LL& - 7) '::: станем на начало блока данных
       
       Get #fi%, , BBuf     '::: Читаем блок данных
       
       Close #fi%
       
       Form1.Image1.Picture = PictureFromBits(BBuf)
    
    Else
    
       Close #fi%
    
       MsgBox "Блок данных не найден!"
    
    End If
 
End Sub
Вложения
Тип файла: zip t124a.zip (154.1 Кб, 1 просмотров)
3
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.04.2020, 11:18
Цитата Сообщение от Catstail Посмотреть сообщение
Интернет велик... Загрузить картинку из памяти
Замечательно!
1
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.04.2020, 12:16
Цитата Сообщение от Catstail Посмотреть сообщение
The trick, объединить-то - да, но придется еще оглавление создавать...
Можно просто один файл прикрепить от PropertyBag.
1
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.04.2020, 19:28
Лучший ответ Сообщение было отмечено Anti_All как решение

Решение

Сделал специальный класс который можно просто добавить в проект и использовать без всяких дополнительных зависимостей.
Данный класс позволяет работать с файлами прикрепленными "в хвост" исполняемого файла. В архиве 2 проекта. Первый позволяет добавлять в конец любого исполняемого файла данные (даже в себя)

, второй показывает пример использования:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
' //
' // Test CEmbeddedFiles class usage
' //
 
Option Explicit
 
Sub Main()
    Dim cEmb    As CEmbeddedFiles
    Dim lIndex  As Long
    Dim vData   As Variant
    Dim bData() As Byte
    Dim lHex    As Long
    Dim sHex    As String
    
    Set cEmb = New CEmbeddedFiles
    
    cEmb.Initialize App.hInstance
    
    Open "dump.txt" For Output As #1
    
    For lIndex = 0 To cEmb.FilesCount - 1
    
        Print #1, "File: "; lIndex
        Print #1, "Name: "; cEmb.FileName(lIndex)
        
        If IsObject(cEmb.FileData(cEmb.FileName(lIndex))) Then
            
            Print #1, "Type: Object"
            
        Else
        
            bData = cEmb.FileData(cEmb.FileName(lIndex))
            Print #1, "Type: Binary"
            
            If Not Not bData Then
            
                Print #1, "Size: "; UBound(bData) + 1
                
                Print #1, "First 16 bytes:"
                
                For lHex = 0 To IIf(UBound(bData) > 15, 15, UBound(bData))
                    
                    sHex = Hex$(bData(lHex))
                    
                    If Len(sHex) = 1 Then sHex = "0" & sHex
                    
                    Print #1, sHex; " ";
                    
                Next
                
                Print #1, ""
                
            Else
                Print #1, "Size: 0"
            End If
            
        End If
 
    Next
    
End Sub
Данные можно вставить непосредственно в EXE, а также сохранить в сыром виде.
Вложения
Тип файла: zip EOFData.zip (127.2 Кб, 10 просмотров)
7
10.04.2020, 19:36

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
"TAIL"
Что-то ТС замолчал

0
2 / 2 / 0
Регистрация: 26.03.2020
Сообщений: 41
11.04.2020, 19:31  [ТС]
При помощи вложенных в данную тему архивов мне удалось найти ответ на свой вопрос. Особенно полностью решил мою задачу архив "EOFData.zip", который прикрепил в данную тему The trick.

Большое спасибо Catstail, за то, что уделили время и поделились своими знаниями, своими проектами.

И конечно же огромное спасибо The trick, за то, что всегда приходите на помощь и своими хакерскими приёмами решаете задачи, которые очень сложно и где-то невозможно, решить стандартными методами. Спасибо Вам The trick.

Спасибо Администрации форума, спасибо всем.
Вопрос закрыт.

Добавлено через 4 часа 6 минут
The trick, Ваш проект, который находится в архиве "EOFData.zip" показывает рисунки и проигрывает *.wav файлы в встроенных vbокнах.
1) Какое значение, Вашего проекта, использовать, чтобы рисунок показывал в "Image1.Picture", а *.wav файлы в "WindowsMediaPlayer1.URL" (чтобы можно было управлять звуком)?
0
2 / 2 / 0
Регистрация: 26.03.2020
Сообщений: 41
25.04.2020, 17:39  [ТС]
The trick, Ваш проект, который находится в архиве "EOFData.zip", который Вы выложили по адресу VB6. Как обойти ошибку Out of memory?, показывает рисунки и проигрывает *.wav файлы в встроенных vbокнах.
Не могли бы Вы сделать так, чтобы например:
Я запускаю проект (с хвостом) и проект при загрузке
1) Открывает *.jpg файл в Image1, *.gif файл в Image2, *.Wav файл в WindowsMediaPlayer1, если в WindowsMediaPlayer1 невозможно, тогда открыть *.Wav файл при помощи Вашего проекта, который находится в архиве "DirectSoundVB6 (1).rar", который Вы выложили по адресу Visual Basic 6.0. Как воспроизвести ресурсный файл *.Wav по его указателю в памяти?
The trick,честно, не хотел Вас отвлекать по пустякам, потому что это для Вас пустяки, но я уже почти месяц не могу решить данную задачу.
The trick, Спасибо Вам.
0
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
25.04.2020, 19:26
Anti_All, прикрепил проект.
Вложения
Тип файла: zip eof_help.zip (111.1 Кб, 10 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2020, 19:26
Помогаю со студенческими работами здесь

Как победить ошибку Out of memory?
Добрый день, форумчане! У меня есть ListBox. Если двойным кликом нажать на надпись, должна появится форма. Все работало прекрасно, но...

Как обойти ошибку 207?
Суть проблемы такова: при изменении n=100 на n=1000 компилятор ТП ругается error'ом 207. Как я подозреваю, это происходит из-за того, что...

XMLHttpRequest. как обойти ошибку?
Привет! Подскажите как обойти ошибку. xhr.open('GET', 'https://up.htmlacademy.ru/assets/javascript/demo/8-xhr/data.json'); ...

Как обойти ошибку Warning: file_get_contents?
Доброго времени суток форумчане. Помогите пожалуйста начинающему... Что означает эта ошибка и как её исправить? Ошибка: Warning:...

Как можно обойти эту ошибку ?
Собственно сама ошибка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru