Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Пара вопросов Добавлено: 21.01.05 07:13  

Автор вопроса:  Mihalыch | ICQ: 373-509-101 
УРА, заработало, а то у меня уже ломка началась.
Всем привет!
У меня возникло пара вопросов.
1. Допустим, создаем проект, на форму кидаем метку, присваиваем её Caption’у какое-то значение. Открываем файл формы в блокноте и видим (Caption = "Наше значение"), но если присвоить сильно длинную строку, то увидим, например (Caption = $"frmMain.frx":0CCA). Понятно, что здесь указан двоичный файл, где хранится наша длинная строка, и какой-то адрес (наверное в HEX). Вопрос, как найти/выделить эту строку из frx’а?
2. Допустим в файле инициализации, есть ключ 1= значение , если получить его значение, то получится “значение”, а можно ли получить его как есть, т.е. “ значение ”?

Ответить

  Ответы Всего ответов: 22  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 21.01.05 07:37
То что я увидел из Hex-Viewer'а FAR'а
Тексту метки предшествуют коды: 01 13 00 00 (вероятно какой то Long).
А завершает код: 0F.

Смещение там указано относительно нуля (т.е. начала файла). Вроде ничего сложного нет. Что у тебя вызвало затруднение?

Ответить

Номер ответа: 2
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #2 Добавлено: 21.01.05 07:45
Вопрос в том, как программно, на VB, получить эту строку?

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 21.01.05 08:01
Открывай файл для двоичного доступа и грузи с помощью GET.

Ответить

Номер ответа: 4
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #4 Добавлено: 21.01.05 08:14
CyRax, вот смотри есть адрес (0CCA в Dec - 3274), как его разобрать? Где здесь смещение, указывающее на начало и конец строки, или на начало и длину?
Ну не могу я понять…

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 21.01.05 08:51
Смещений на конец и длину я там не нашёл. Скорее всего что их там нет (я более чем уверен, но если ты сомневаешся - проверь). Число 3274 указывает на позицию начала строки в файле, которая заканчивается кодом &HF (15). Определять конец можно например по началу данных следующей строки или же по коду 15.

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 21.01.05 08:54
Вот так расположены данные в файле
0CCA -> 01|13|00|00|Label1|0F

Ответить

Номер ответа: 7
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #7 Добавлено: 21.01.05 09:01
CyRax, вряд ли, размер frx файла всего - 13 325 байт. Но все равно спасибо, а по второму вопросу, ответ я понял = не как?

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 21.01.05 09:13
Первые 4 байта скорее всего внутренняя сигнатура метки в VB. Хотя я и не уверен что это константа, возможно что у разных компов будут разные числа.
Простым подсчётом получи её значение и сверь:

Signature = &H100 * &H13 + 1

 Здесь &H13 - значение второго байта, а 1 - первого. Полная формула может выглядеть так:

Signature = &H1000000 * Byte4 + &H10000 * Byte3 + &H100 * Byte2 + Byte1

Ответить

Номер ответа: 9
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #9 Добавлено: 21.01.05 09:16
Спасибо! Попробую.

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 21.01.05 09:18

CyRax, вряд ли, размер frx файла всего - 13 325 байт. Но все равно спасибо, а по второму вопросу, ответ я понял = не как?

 А почему бы и нет? Ведь 3274 меньше 13 325. Я тебе показал то что у меня было в FRM и FRX файлах. А то что у тебя - так посмотри и скажи мне.

Ответить

Номер ответа: 11
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #11 Добавлено: 21.01.05 09:46
Пока выяснил вот что:
1. позиция первого символа строки в файле frx – 1246
2. длина строки – 334
3. строка оканчивается символом с кодом 1

Ответить

Номер ответа: 12
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #12
Добавлено: 21.01.05 10:40
По первому вопросу: лучше скажите, чему будет равен идентификатор ресурса в откомпиленном файле. Может в этом дело?

Насчет второго вопроса: почему бы нет, напиши свой парсер ini :) А кавычки одинарные или двойные как себя ведут?

Ответить

Номер ответа: 13
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #13 Добавлено: 21.01.05 10:52
mc-black, по первому вопросу, программа работает именно с файлами проекта, по второму, конечно можно заменить крайние пробелы (если они есть) на скажем chr(1), а при получении значения ключа, снова заменить их на chr(32), но я подумал, может есть возможность без этого получить строку в исходном виде.

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 21.01.05 12:49
Скорее всего что там данные расположены именно так как я описывал.
Потому как я в проекте делал 2 метки, текстовое поле и ещё несколько контролов.
Длинный текст меток и текстового поля находился именно по тем адресам, которые были указаны в FRM-файле.
Различия были только в сигнатурах. У меток одна сигнатура (01|13|00|00 ... 15), а у текстового поля другая.

Ответить

Номер ответа: 15
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #15 Добавлено: 21.01.05 18:24
CyRax, ты был абсолютно прав, это адрес первого символа - 4. Вот этой ф-й у меня получилось выдрать эти строки из frx'а. Правда с окончанием строки гемор, оканчивается разними символами, закономерности я не нашел.

Private Function GetFrxData(sPath As String, Displacement As Long) As String
    ;Dim i As Long
    ;Dim Min As Long
    ;Dim hMem As Long
    ;Dim hFile As Long
    ;Dim InStrRes As Long
    ;Dim sInput As String
    ;Dim aByte() As Byte
    ReDim aByte(0 To FileLen(sPath) - Displacement)
    hMem = VarPtr(aByte(0))
    hFile = CreateFile(sPath, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
    SetFilePointer hFile, Displacement + 4, 0, FILE_BEGIN
    ReadFile hFile, ByVal hMem, FileLen(sPath), FileLen(sPath), 0
    CloseHandle hFile
    sInput = Space(FileLen(sPath))
    CopyMemory ByVal sInput, ByVal hMem, UBound(aByte)
    Min = FileLen(sPath)
    For i = 31 To 1 Step -1
        InStrRes = InStr(1, sInput, Chr(i))
        If InStrRes < Min And InStrRes > 0 Then Min = InStrRes
    Next i
    GetFrxData = Trim(Mid(sInput, 1, Min - 2))
End Function

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам