|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Доброго всем дня. Есть такой вопросик, точнее есть .dll нужно из скрипта узнать её версию. Я тут покапался, нашёл на sybase, работает да уж больно много букв ... Попроше никак нельзя? Заранее благодарен. Вот оно: http://www.sybase.com/detail?id=1002724 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2007, 20:51 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
voronkДоброго всем дня. Есть такой вопросик, точнее есть .dll нужно из скрипта узнать её версию. Я тут покапался, нашёл на sybase, работает да уж больно много букв ... Попроше никак нельзя? Заранее благодарен. Вот оно: http://www.sybase.com/detail?id=1002724 А что тут сложного-то? Скопировал себе исходник и все :) Ладно, вот то же самое, только проще :): Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2007, 22:16 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Подниму тему. На PB 11.1 (а я думаю и на других версиях тоже, т.к. и на других версиях видел, что PB криво структуру об информации в файле заполняет) вызоз с параметром "\VarFileInfo\Translation" возвращает 04091252, однако с такой кодовой страницей информации в файле нет вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 12:28 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркПодниму тему. На PB 11.1 (а я думаю и на других версиях тоже, т.к. и на других версиях видел, что PB криво структуру об информации в файле заполняет) вызоз с параметром "\VarFileInfo\Translation" возвращает 04091252, однако с такой кодовой страницей информации в файле нет вообще. Да, это на всех версиях такое. На самом деле Translation должно быть 040904E4. Видно что 0x04E4 == 1252. Т.е. из-за бага где-то внутри PB кодовая страница была дважды декодирована из шестнадцатиричной системы. Поскольку во всех версиях используется одна и таже кодовая страница, то можно забить на "\VarFileInfo\Translation" и всегда искать в 040904E4 Ну либо пытаться 1252 рассматривать и как десятичное и как шестнадцатиричное и искать в обоих ветках. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 15:06 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Уточню, что здесь имеется ввиду определение информации о exe файле сгенерированным PB. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 15:32 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркУточню, что здесь имеется ввиду определение информации о exe файле сгенерированным PB. Так а я про что? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 16:00 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЛокшин МаркУточню, что здесь имеется ввиду определение информации о exe файле сгенерированным PB. Так а я про что? :) Ну из моего первого поста не совсем ясно про что речь идет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 16:40 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
А вот тогда такой вопрос. Между данными вызовами Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 17:50 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркА вот тогда такой вопрос. Между данными вызовами Код: plaintext 1. 2. 3. 4.
В принципе да, там должен быть блоб. Я не помню уже почему я строку использовал (наверно в 97-98 годах, когда я этот код писал, я еще не особо ориентировался в PB). Сейчас бы я блоб использовал. Но если подумать, то так как никаких манипуляций с ls_buf не производится после его заполнения бинарными данными, то в PB9 и ниже все должно отработать без проблем (и работает). А вот если будет PB10+ и модификатор ";ansi" то тогда при передаче во вторую ф-ю значение ls_buf испортится. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 18:13 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyНо если подумать, то так как никаких манипуляций с ls_buf не производится после его заполнения бинарными данными, то в PB9 и ниже все должно отработать без проблем (и работает). Ну вообще-то, как мне кажется, PB сократит область памяти занимаемую строкой до первого нулевого байта. Ну и соответственно в оставшуюся часть с полным спокойствием что-нибудь еще записать сможет по случаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 18:24 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркНу вообще-то, как мне кажется, PB сократит область памяти занимаемую строкой до первого нулевого байта. Ну и соответственно в оставшуюся часть с полным спокойствием что-нибудь еще записать сможет по случаю. Если бы это было так, то приведенный код бы не работал, так как в указанном буфере хранятся строки в формате юникод, а там нулевых байтов - через один. Но лучше конечно переделать на блоб, тем более что это тривиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 18:42 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркPB сократит область памяти занимаемую строкой до первого нулевого байта. Это происходит только при копировании в другую переменную или преобразовании в другой тип данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2010, 18:43 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЛокшин МаркНу вообще-то, как мне кажется, PB сократит область памяти занимаемую строкой до первого нулевого байта. Ну и соответственно в оставшуюся часть с полным спокойствием что-нибудь еще записать сможет по случаю. Если бы это было так, то приведенный код бы не работал, так как в указанном буфере хранятся строки в формате юникод, а там нулевых байтов - через один. Не факт. Если область за первым нулевым байтом освобождена, но еще никем не занята, то то, что там есть спокойно может читаться. Ошибка только может возникнуть если PB для каких-либо целей захочет выделить блок памяти который придется на освобожденный и что-то туда запишет в промежутках между выховами функций, но если изменение размера памяти, выделенной под строку происходит только при копировании в другую переменную или преобразовании в другой тип, то конечно такая ситуация невозможна. Зато, если PB так обращается с памятью, то тривиально написать программу, которая съест всю память фактически заняв пару десятков байт. Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 09:36 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркОднако, как показывает эксперимент, этого не происходит, следовательно между присвоениями s[i] значений происходит перевыделение области памяти, следовательно описанная мной ситуация возможна. Как-то так. При передаче строки во внешнюю ф-ю по ссылке(ref) никогда не происходит перевыделение памяти. То что ф-я записала в переданный ей буфер, так в нем и остается - никакой доп обработки не производится. Ваш пример - совершенно другая ситуация. При присвоении в строковую переменную другого значения всегда происходит выделение нового блока памяти (и освобождение старого), даже если новое значение меньше старого. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 15:03 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyТо что ф-я записала в переданный ей буфер, так в нем и остается - никакой доп обработки не производится. Чтобы в этом убедиться необходимо видеть код PB... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 15:23 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркAnatoly MoskovskyТо что ф-я записала в переданный ей буфер, так в нем и остается - никакой доп обработки не производится. Чтобы в этом убедиться необходимо видеть код PB... Вовсе не обязательно. Существует куча косвенных способов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 15:35 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Вовсе не обязательно. Существует куча косвенных способов. Например? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 15:54 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркAnatoly Moskovsky Вовсе не обязательно. Существует куча косвенных способов. Например? Например то что во внешнюю ф-ю передается адрес самой строки (в чем легко убедиться), а не временного буфера из которого потом PB бы копировал в строку, уже на 99% говорит о том что ничего там не обрабатывается после возврата из ф-и. Оставшийся 1% подтверждается хотя бы тем что мой объект n_cst_dll работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 16:19 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЛокшин МаркAnatoly Moskovsky Вовсе не обязательно. Существует куча косвенных способов. Например? Например то что во внешнюю ф-ю передается адрес самой строки (в чем легко убедиться), а не временного буфера из которого потом PB бы копировал в строку, уже на 99% говорит о том что ничего там не обрабатывается после возврата из ф-и. Вовсе нет. Ничто не мешает PB проверить длинну строки после возврата и уменьшить выделенную память под нее в случае необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 16:27 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркНичто не мешает PB проверить длинну строки после возврата и уменьшить выделенную память под нее в случае необходимости. Это как раз легко проверить и убедиться что это не так. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Однако приложение выделяет себе на каждой итерации дополнительные 100М и вылетает после исчерпания памяти. Тогда как следующий цикл спокойно завершается: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 17:40 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЕсли бы было так как вы предполагаете, то для работы этого цикла было бы достаточно около 100М. Однако приложение выделяет себе на каждой итерации дополнительные 100М и вылетает после исчерпания памяти. Ну сейчас так, а в очередном билде китайцы решат оптимизировать работу с памятью ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2010, 10:02 |
|
GetFileVersionInfo ...
|
|||
---|---|---|---|
#18+
Локшин МаркНу сейчас так, а в очередном билде китайцы решат оптимизировать работу с памятью Вообще-то я всего лишь, как вы пожелали, продемонстрировал, что не нужно видеть исходники PB чтобы для любой конкретной версии выяснить происходит ли какая-нибудь обработка после возврата из внешней ф-и или нет. В том числе это можно будет сделать и для вашей китайской версии. Это все никак не отменяет тот факт, что для бинарных данных надо использовать блоб, а не строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2010, 10:54 |
|
|
start [/forum/topic.php?fid=15&fpage=26&tid=1335988]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 155ms |
0 / 0 |