Пара вопросов..Очень нужно..

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Пара вопросов..Очень нужно..

Сообщение exp. » 28.02.2007 (Ср) 17:40

меня интересует пара вопросов..
1.как извлечь только 1файл при помощи zlibwapi.dll?
если имя заранее известно..
2.можно ли выгрузить компонент, во время
работы..напримерCommonDialog..если да, то как??
3.почему VB приложения заимают так много оперативной памяти??
и как уменьшить..

ЗЫ прочел не один десяток статей..поиском пользовался..
найдя тем самым решения на большиство проблем..
буду очень вам благодарен, если получу и на эти ответы.. :)

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

Re: Пара вопросов..Очень нужно..

Сообщение Хакер » 28.02.2007 (Ср) 23:51

exp. писал(а):меня интересует пара вопросов..
1.как извлечь только 1файл при помощи zlibwapi.dll?
если имя заранее известно..


В документации по zlib разве не написано?

exp. писал(а):2.можно ли выгрузить компонент, во время
работы..напримерCommonDialog..если да, то как??


Какой компонент? Зачем выгружать? Ради экономии памяти? :D

3.почему VB приложения заимают так много оперативной памяти??
и как уменьшить..


Много? 0,7 Гб чтоли?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 01.03.2007 (Чт) 11:58

Хакер
спасибо за столь вразумительные ответы :lol:
это как раз то,что я искал :D

В документации по zlib разве не написано?

я не нашел..
смотрел http://www.zlib.net/manual.html

Какой компонент? Зачем выгружать? Ради экономии памяти?
Много? 0,7 Гб чтоли?

в моем случае это критично..
тольчко не советуйте переходить на C[/url]

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 01.03.2007 (Чт) 11:59

контролировать объем выделяемой для работы памяти в программе на VB нельзя.

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 01.03.2007 (Чт) 18:30

контролировать объем выделяемой для работы памяти в программе на VB нельзя.

ну это я уже понял, а по хитрому никак нельзя??
хотя ответ уже предугадываю..

вот бы с zlib помогли..

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 05.03.2007 (Пн) 15:32

ну хотя бы ответьте как запихнуть программу в cmd или пуск выпольнить(хотя это одно и тоже..)
не меняя ее места...

например моя прога находится %program files%\myprog\run.exe

чтобы, если в cmd написать run , запускалась моя программа..

и заодно.. как узнать,куда установлен winrar..

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.03.2007 (Пн) 15:42

Автор, переведи свой поток сознания в русские слова.
Тогда будет ясно, поможет ли тебе установка переменной PATH, или вопрос заключается в другом.
Lasciate ogni speranza, voi ch'entrate.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 05.03.2007 (Пн) 18:02

exp. писал(а):ну хотя бы ответьте как запихнуть программу в cmd или пуск выпольнить(хотя это одно и тоже..)
не меняя ее места...

например моя прога находится %program files%\myprog\run.exe

чтобы, если в cmd написать run , запускалась моя программа..


Скопировать ее в папку Windows.

exp. писал(а):и заодно.. как узнать,куда установлен winrar..


Думаю через реестр.

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 05.03.2007 (Пн) 18:24

ReDim MindStream as myMind
Set MindStream = New RussianLanguage

:)

-вопрос в том, что написав в коммандной строке
например notepad, то загружаетя блокнот..
-меня интересует куда и что добавить, чтобы таким же способом запустить мою программу..

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 05.03.2007 (Пн) 18:28

Скопировать ее в папку Windows.

а еще можно в system32 и еще в %Documents and Settings%\username"
но некоторые приложения, например тотже WinRAR можно запустить командой winrar в CMD..
значит где-то в рестре это записанно.. :roll:

PS извиняюсь, WinRAR можно запустить командой winrar в Пуск>Выполнить..

еще больше запутался..

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

Сообщение GSerg » 05.03.2007 (Пн) 18:34

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths ?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 05.03.2007 (Пн) 20:04

GSerg
спасибо! то.что нужно..

пожалуйста ответьте еще на пару вопросов:
1.можно ли хранить dll библиотеки в systm32??
по эспериментам оказалось,что можно..но всегдали это будет работать и на всех версиях windows??
2.я так и не понял механизмработы zlib..как воспользоватся
мануал раз 5 перчитал..не нашел доступного примера CyberCript
слишком сложен для меня..
мне нужна лишь функция
Код: Выделить всё
Private Declare Function uncompress Lib "ZLibWAPI.dll" (ByRef dest As Any, ByRef destLen As Long, ByRef source As Any, ByVal sourceLen As Long) As Long

и если можно..как разорхивировать только нжные фалы..

PS обещаю написать FAQ о полученном опыте в стиле By Dummy for Dummies. или то,что нужно новичку..

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

Сообщение GSerg » 05.03.2007 (Пн) 20:59

1. С целью чего?
2. Не читал.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 06.03.2007 (Вт) 6:22

смотрел на http://www.zlib.net/manual.html
там,правда все для C..
но на VB перевести не очень слоржно..
и все же как правильно..

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 06.03.2007 (Вт) 17:09

Код: Выделить всё
Private Declare Function compress Lib "ZLibWAPI.dll" (ByRef dest As Any, ByRef destLen As Long, ByRef source As Any, ByVal sourceLen As Long) As Long
Private Declare Function compressBound Lib "ZLibWAPI.dll" (ByVal sourceLen As Long) As Long
Private Declare Function uncompress Lib "ZLibWAPI.dll" (ByRef dest As Any, ByRef destLen As Long, ByRef source As Any, ByVal sourceLen As Long) As Long

Private Const Z_OK As Long = &H0

Private Sub Main()
    Dim FileData() As Byte, FileSize As Long
    Dim CompressBuf() As Byte, CompressLen As Long
    Dim DecompressBuf() As Byte, DecompressLen As Long
    Dim RetVal As Long
    Dim FileName As String
   
    FileName = "X:\Path\File.xyz"
   
    FileSize = FileToBuf(FileName, FileData())
    If (FileSize > 0) Then
   
        CompressLen = compressBound(FileSize)
        ReDim CompressBuf(0 To (CompressLen - 1)) As Byte
       
        RetVal = compress(CompressBuf(0), CompressLen, FileData(0), FileSize)
        If (RetVal = Z_OK) Then
            Debug.Print "Compression succeeded"
            DecompressLen = FileSize
            ReDim DecompressBuf(0 To (DecompressLen - 1)) As Byte
           
            RetVal = uncompress(DecompressBuf(0), DecompressLen, CompressBuf(0), CompressLen)
            If (RetVal = Z_OK) Then
                Debug.Print "Decompression succeeded, result size: " & DecompressLen & " bytes"
            Else
                Debug.Print "Decompress failed.."
            End If
        Else
            Debug.Print "Compression failed.."
        End If
    End If
End Sub

Private Function FileToBuf(ByRef inFile As String, ByRef outBuf() As Byte) As Long
    Dim FNum As Integer
    Dim RetBuf() As Byte
   
    If (Not FileExist(inFile)) Then Exit Function
   
    FNum = FreeFile()
    Open inFile For Binary Access Read Lock Write As #FNum
        ReDim RetBuf(0 To (LOF(FNum) - 1)) As Byte
        Get #FNum, , RetBuf()
    Close #FNum
   
    outBuf = RetBuf
    FileToBuf = UBound(RetBuf) + 1
End Function

Private Function FileExist(ByRef inFile As String) As Boolean
    On Error Resume Next
    FileExist = CBool(FileLen(inFile) + 1)
End Function


ну помогие... что не так?
если убрать compress, то и uncompress не работает..
и куда это все сохраняется чтото никак не пойму..

AiLEX
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.09.2005 (Вс) 11:44
Откуда: Котлас

Сообщение AiLEX » 06.03.2007 (Вт) 23:56

ну помогие... что не так?
если убрать compress, то и uncompress не работает..
и куда это все сохраняется чтото никак не пойму..


А в чем проблема? Код рабочий. В CompressBuf хранится сжатый файл, а в DecompressBuf разжатый после сжатия. Может DLL левая какая-нибудь, они вроде бы как разные бывают, можно у яндекса, например, спросить "ZLibWAPI.dll".
А чтобы извлечь конкретный(е) файл(ы) из zip, тут помоему нужно просто знать структуру ZIP файла, сама dll этого не умеет.
Упала вилка на пол и как начала валяться...

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 07.03.2007 (Ср) 12:46

я знаю, что код работает.. и dll рабочая

помогите доработать код..
в дальнейшем будет примером..для таких же,как я..

1.почему decompress не работает без compress?
2.как потом сохранить все это в виде файлов?..
понятно, если файл один, а если их много..

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 07.03.2007 (Ср) 13:09

как потом сохранить все это в виде файлов?..
понятно, если файл один, а если их много..

Либо придумать свой формат хранения нескольких файлов, либо использовать существующий (zip, tar...) - прочитав документацию по интересующим форматам.

почему decompress не работает без compress?

О чём идёт речь? Как можно распаковать то, что не запаковано? Откуда берёшь данные для uncompress?
Программисты не глючат - глючат компиляторы...

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 07.03.2007 (Ср) 17:39

О чём идёт речь? Как можно распаковать то, что не запаковано? Откуда берёшь данные для uncompress?

данные для uncompress в моем примере это FileName = "X:\Path\File.xyz" и изначально является архивом zip
получается так..
Код: Выделить всё
Private Declare Function compress Lib "ZLibWAPI.dll" (ByRef dest As Any, ByRef destLen As Long, ByRef source As Any, ByVal sourceLen As Long) As Long
Private Declare Function compressBound Lib "ZLibWAPI.dll" (ByVal sourceLen As Long) As Long
Private Declare Function uncompress Lib "ZLibWAPI.dll" (ByRef dest As Any, ByRef destLen As Long, ByRef source As Any, ByVal sourceLen As Long) As Long

Private Const Z_OK As Long = &H0

Private Sub Main()
    Dim FileData() As Byte, FileSize As Long
    Dim CompressBuf() As Byte, CompressLen As Long
    Dim DecompressBuf() As Byte, DecompressLen As Long
    Dim RetVal As Long
    Dim FileName As String
   
    FileName = "X:\Path\File.xyz"
   
    FileSize = FileToBuf(FileName, FileData())
    If (FileSize > 0) Then
   
        CompressLen = compressBound(FileSize)
        ReDim CompressBuf(0 To (CompressLen - 1)) As Byte
       
        DecompressLen = FileSize
        ReDim DecompressBuf(0 To (DecompressLen - 1)) As Byte
           
        RetVal = uncompress(DecompressBuf(0), DecompressLen, CompressBuf(0), CompressLen)
        If (RetVal = Z_OK) Then
                Debug.Print "Decompression succeeded, result size: " & DecompressLen & " bytes"
        Else
                Debug.Print "Decompress failed.."
        End If
     End If
End Sub

Private Function FileToBuf(ByRef inFile As String, ByRef outBuf() As Byte) As Long
    Dim FNum As Integer
    Dim RetBuf() As Byte
   
    If (Not FileExist(inFile)) Then Exit Function
   
    FNum = FreeFile()
    Open inFile For Binary Access Read Lock Write As #FNum
        ReDim RetBuf(0 To (LOF(FNum) - 1)) As Byte
        Get #FNum, , RetBuf()
    Close #FNum
   
    outBuf = RetBuf
    FileToBuf = UBound(RetBuf) + 1
End Function

Private Function FileExist(ByRef inFile As String) As Boolean
    On Error Resume Next
    FileExist = CBool(FileLen(inFile) + 1)
End Function

exp.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 05.01.2007 (Пт) 12:36

Сообщение exp. » 08.03.2007 (Чт) 20:46

подскожите pkunzip 2.06
умеет работать с длинными именами,
если нет, то чем это грозит??


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 42

    TopList