HI ALL! Надеюсь мой вопрос не покажется очень сложным, но в доступной литературе ответ на него не нашёл. Имеется большой файл с неструктурированными данными (более 5 Мб). Необходимо на его основе создать несложный СОМ сервер, который использует все эти данные. Вопрос: как поместить данные в файл сервера (*.dll) в VС++6, как в дальнейшем получить доступ к данным из методов сервера (данные представляют собой смесь из различных типов).
Спасибо!
Здравствуйте, Ruslan2, Вы писали:
R> HI ALL! Надеюсь мой вопрос не покажется очень сложным, но в доступной литературе ответ на него не нашёл. Имеется большой файл с неструктурированными данными (более 5 Мб). Необходимо на его основе создать несложный СОМ сервер, который использует все эти данные. Вопрос: как поместить данные в файл сервера (*.dll) в VС++6, как в дальнейшем получить доступ к данным из методов сервера (данные представляют собой смесь из различных типов). R> Спасибо!
В принципе любой файл мщжно оформить в виде ресурса ( как, например, диалог или курсор <ну ты понал о чём это я> ). И тогда он попадает в твою dll (exe). Если это то, что тебе надо, то копай MSDN (RSDN) на предмет Resources
Здравствуйте, Слава, Вы писали:
R>> HI ALL! Надеюсь мой вопрос не покажется очень сложным, но в доступной литературе ответ на него не нашёл. Имеется большой файл с неструктурированными данными (более 5 Мб). Необходимо на его основе создать несложный СОМ сервер, который использует все эти данные. Вопрос: как поместить данные в файл сервера (*.dll) в VС++6, как в дальнейшем получить доступ к данным из методов сервера (данные представляют собой смесь из различных типов).
С>В принципе любой файл мщжно оформить в виде ресурса ( как, например, диалог или курсор <ну ты понал о чём это я> ). И тогда он попадает в твою dll (exe). Если это то, что тебе надо, то копай MSDN (RSDN) на предмет Resources
Да, я б тоже пробовал так. Я бы пробовал прилинковать файл командой (в RC файле)
1 TYPELIB "BIGFILE.BIN"
после чего его нужно:
1) найти. Функция FindResource, необходимо нонять какой у него будет тип и имя, это можно посмотреть каким-нибудь просмотрщиком ресурсов. TYPELIB не документирована в должной мере,
2) загрузить. Функция LoadResource.
3) получить указатель на образ загруженного файла в памяти. Функция LockResource.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Слава, Вы писали:
GS>после чего его нужно: GS>1) найти. Функция FindResource, необходимо нонять какой у него будет тип и имя, это можно посмотреть каким-нибудь просмотрщиком ресурсов. TYPELIB не документирована в должной мере, GS>2) загрузить. Функция LoadResource. GS>3) получить указатель на образ загруженного файла в памяти. Функция LockResource.
Свои данные в файл сервера я запихнул, это действительно не сложно. Но у меня под рукой нет ни одного просмотрщика ресурсов. Дайти пожайлуста ссылку на любой free просмотрик.
Здравствуйте, Ruslan2, Вы писали:
R> Свои данные в файл сервера я запихнул, это действительно не сложно. Но у меня под рукой нет ни одного просмотрщика ресурсов. Дайти пожайлуста ссылку на любой free просмотрик.
Здравствуйте, Ruslan2, Вы писали:
R>Здравствуйте, George Seryakov, Вы писали:
R> Свои данные в файл сервера я запихнул, это действительно не сложно. Но у меня под рукой нет ни одного просмотрщика ресурсов. Дайти пожайлуста ссылку на любой free просмотрик.
Здравствуйте, Слава, Вы писали:
R>> Свои данные в файл сервера я запихнул, это действительно не сложно. Но у меня под рукой нет ни одного просмотрщика ресурсов. Дайти пожайлуста ссылку на любой free просмотрик.
С>здесь
Я, пожалуй, был не прав. Простым просмотрщиком ресурсов не увидеть какое имя будет у ресурса TYPELIB. Это нао лопатить формат EXE-файла, секция ресурсов.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Слава, Вы писали:
R>>> Свои данные в файл сервера я запихнул, это действительно не сложно. Но у меня под рукой нет ни одного просмотрщика ресурсов. Дайти пожайлуста ссылку на любой free просмотрик.
С>>здесь
GS>Я, пожалуй, был не прав. Простым просмотрщиком ресурсов не увидеть какое имя будет у ресурса TYPELIB. Это нао лопатить формат EXE-файла, секция ресурсов.
Имя ресурса существует только в твоём коде. Это выглядеть может так:
в файле recources.h , например:
#define IDC_MYRECOURSE 555
в данном случае твой ресурс идентифицируется номером 555, который покажет просмоторщик русурсов, а IDC_MYRECOURSE — это эквивалент номера, существующий до компиляции.
А есле не секрет- зачем билиотеку типов засовывать в ресурсы?
Здравствуйте, Слава, Вы писали:
GS>>Я, пожалуй, был не прав. Простым просмотрщиком ресурсов не увидеть какое имя будет у ресурса TYPELIB. Это надо лопатить формат EXE-файла, секция ресурсов.
С>Имя ресурса существует только в твоём коде.
Ты уверен? А ты имя ресурса никогда не видел при просмотре исполняемого файла? Оно там как-то сужествует, чтоб ты его увидел?
С>А есле не секрет- зачем билиотеку типов засовывать в ресурсы?
А человек хотел обертку вокруг файла данных, вшитых в исполняемый файл. Вроде, засунуть в исполняемый файл можно через ресурс типа TYPELIB.
Здравствуйте, George Seryakov, Вы писали:
GS>Я, пожалуй, был не прав. Простым просмотрщиком ресурсов не увидеть какое имя будет у ресурса TYPELIB. Это нао лопатить формат EXE-файла, секция ресурсов.
Здравствуйте, George Seryakov, Вы писали:
С>>Имя ресурса существует только в твоём коде.
GS> Ты уверен? А ты имя ресурса никогда не видел при просмотре исполняемого файла? Оно там как-то сужествует, чтоб ты его увидел?
Открываю в VS мой скомпилированный exe-шник, в поле "Open As" указываю Resources и вместо имён вижу номера. Может быть я не так понимаю что такое имя ресурса?.
GS> А человек хотел обертку вокруг файла данных, вшитых в исполняемый файл. Вроде, засунуть в исполняемый файл можно через ресурс типа TYPELIB.
OK.
Здравствуйте, Слава, Вы писали:
С>Открываю в VS мой скомпилированный exe-шник, в поле "Open As" указываю Resources и вместо имён вижу номера. Может быть я не так понимаю что такое имя ресурса?.
А, так это нумерованные ресурсы. Ты можешь работать с ресурсом через имя (тогда в таблице ресцрсов будет стоять оно), а можешь — через номер. Тогда во всех вызовах вместо указателя на строку-имя ресурса будет стоять MAKEINTRESOURCE(N), т.е. просто число откакстенное на LPSTR.
А вместо числа там может стоять строка, она же и пойдет в таблицу ресурсов. Правда, по дефолту VS уже строковых имен не делает. Но ты вполне можешь ручками добавить что-то вроде
MYABOUT DIALOG DISCARDABLE 0, 0, 235, 55
...
и оно будет видно в ресурсах со строковым именем "MYABOUT".
Сделал как ты показал и всё заработало. Кстати в MSDN я этого варианта функции FindResource не нашёл.
Немного помучившись я нашёл стандартный вариант использования большого ресурса только с помощью среды, без взяких изменений ресурсного файла: Когда через ResourceView добавляешь свой тип ресурса, то сам задаёш имя типа ресурса. Я задал имя BIN. В эту категорию студия и поместила мой файл данных. А теперь:
Номер ресурса берётся в Resource.h. Интересно, что когда я помещал вместо MAKEINTRESOURCE (201) — IDR_BIN1, имя ресурса заданное студией, то ничего не работало.
Как теперь правильно освободить HGLOBAL и указатель, в MSDN указаны только стандартные функции?
R>Номер ресурса берётся в Resource.h. Интересно, что когда я помещал вместо MAKEINTRESOURCE (201) — IDR_BIN1, имя ресурса заданное студией, то ничего не работало.
Ты помещал IDR_BIN1 или MAKEINTRESOURCE (IDR_BIN1)?
R> Как теперь правильно освободить HGLOBAL и указатель, в MSDN указаны только стандартные функции?
И так и так, и ещё с кавычками оба варианта, хотя понимал, что делаю глупость. И #include "resource.h" в хедерном файле есть, т.е должно работать вместо 201 — IDR_BIN1, но не работает, наверное студия где-то недорабатывает, а может и я лопухнулся, хотя несколько раз перепроверял. Но я и ранее сталкивался с подобным поведением, менял имя на код и работал дальше, просто внимания этому не придавал.