Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: как передать в параметрах типизированный массив? / 9 сообщений из 9, страница 1 из 1
10.07.2012, 14:23
    #37873256
Fixin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
Есть функция, считывает весь бинарный файл в массив:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function ReadFeatures(ByVal strFile As String, ByRef pFeatureBuffer)
    Dim CurrByte As Byte
    Dim FileLength As Double
    Dim FileNum As Integer
    Dim CodeData_Cp As Double
    FileNum = FreeFile
    FileLength = FileLen(strFile)
    ReDim CurrBuff(FileLength) As Byte
    ReadFeatures = Int(FileLength / 256)
    
    Open strFile For Binary As FileNum
    Get #FileNum, 1, CurrBuff
    
    For I = 0 To FileLength - 1
        pFeatureBuffer(I) = CurrBuff(I)
    Next
    Close FileNum
End Function



Читаю файл я одной операцией, но т.к. не знаю, как правильно оформить передачу массива, приходится копировать через буферный массив CurrBuff. Можно этого как-то избежать?
Вызов процедуры такой:
Код: vbnet
1.
2.
3.
Dim pMatchBuffer(2560000)  As Byte

gpFingerNum = ReadFeatures(App.Path & "\" & PrmMatchFileName, pMatchBuffer)
...
Рейтинг: 0 / 0
10.07.2012, 14:32
    #37873270
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
Код: vbnet
1.
2.
3.
Function ReadFeatures(...) As Byte()
    ...
    ReadFeatures = CurrBuff
...
Рейтинг: 0 / 0
10.07.2012, 14:33
    #37873273
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
И вообще многабукв

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Function ReadFileB(path As String) As Byte()
Dim r() As Byte
    Open path For Binary As #1
    ReDim r(LOF(1) - 1)
    Get #1, , r
    Close #1
    ReadFile = r
End Function
...
Рейтинг: 0 / 0
10.07.2012, 14:34
    #37873275
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
ReadFile B = r
...
Рейтинг: 0 / 0
10.07.2012, 14:51
    #37873309
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Function ReadFileB(path As String) As Byte()
Dim f Byte
    f = FreeFile
    Open path For Binary As #f
    ReDim ReadFileB(LOF(f) - 1)
    Get #f, , ReadFileB
    Close #f
End Function
...
Рейтинг: 0 / 0
10.07.2012, 14:51
    #37873311
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
Код: vbnet
1.
Dim f as Byte



от руки писал, сорь
...
Рейтинг: 0 / 0
10.07.2012, 15:44
    #37873399
Fixin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
Konst_One, но это получается, нужно создавать новый массив, а в существующий нельзя передать? Хотя как вариант конечно, катит...
...
Рейтинг: 0 / 0
10.07.2012, 15:52
    #37873422
Fixin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
В общем, остановился на этом варианте, спасибо
...
Рейтинг: 0 / 0
10.07.2012, 16:37
    #37873531
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: как передать в параметрах типизированный массив?
> это получается, нужно создавать новый массив, а в существующий нельзя передать?

Очень даже можно. Массив - параметр функции, а возвращает пусть результат: получилось или нет:
Код: vbnet
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.
Function ReadFile(path As String, buf() As Byte) As Boolean
Dim f%
    On Error GoTo err_
    f = FreeFile
    Open path For Binary As #f
    ReDim buf(0 To LOF(f) - 1)
    Get #f, , buf
    Close #f
    ReadFile = True
ex_: Exit Function
    
err_: Resume ex_
End Function

Sub TestReadFile()
Const GOOD_PATH = "C:\winnt\system32\notepad.exe"
Const BAD_PATH = "c:\adqweded\wieudoie.bin"

Dim myByte() As Byte

'с проверкой результата
If ReadFile(GOOD_PATH, myByte) Then
    Debug.Print UBound(myByte)
Else
    Debug.Print "Не удалось прочитать файл " & GOOD_PATH
End If
If ReadFile(BAD_PATH, myByte) Then
    Debug.Print UBound(myByte)
Else
    Debug.Print "Не удалось прочитать файл " & BAD_PATH
End If

'без проверки
ReDim myByte(0 To 0)
Debug.Print UBound(myByte)
ReadFile GOOD_PATH, myByte
Debug.Print UBound(myByte)

End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: как передать в параметрах типизированный массив? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]