Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68

Подключение библиотеки из ресурсов проекта

04.02.2013, 14:47. Показов 2338. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
проект в MFC
Есть некая библиотека, не майкрософтская, добавленная в ресурсы проекта. как подключать ее из ресурсов для использования функций.
Сделано это для того, чтобы на выходе оставался один ехе-файл, и работал на чистой винде без этой библиотеки.

На WIN32 я использовал решение подключения библиотек с помощью MemoryModule,
Но в МФС оно не пашет(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2013, 14:47
Ответы с готовыми решениями:

Работа с картинками из ресурсов проекта и сборка проекта
Всем привет! Проблема вот в чем, я добавил в ресурсы проекта несколько картинок и хочу вывести их в Image. Как задать полный путь через...

Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки
Возникли сложности с подключением библиотеки Crypto: import Crypto.Cipher.AES Выдает следующую ошибку: ...

Создание библиотеки ресурсов
Здравствуйте, Требуется создать библиотеку ресурсов. Ресурсы 2х типов - текстовые файлы и изображения. Нужно сделать их хранение в...

11
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2013, 16:07
C++
1
2
#include <blablabla>
#pragma comment(lib,"nasha_liba.lib")
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
04.02.2013, 17:32  [ТС]
библиотека должна быть встроена в .ехе файл. т.е. я ее кидаю в ресурсы. она не виндовая, а значит не загружена в память (насколько я понимаю) поэтому мне нужно ее как-то загрузить
думаю #include тут не поможет. притом

кстати если что под библиотекой имеется ввиду flash.ocx файл, AdobeFlash. Я хочу воспроизводить флешки даже если у пользователя не установлен адоуб.

Проблема собственно в том, что раньше (в вин32) я использовал буржуйский код MemoryModule.h& MemoryModule.c а в МФС он не работает, так как ругается на "С". Если отключаю предкомпелированные заголовки, тогда ошибка на неоднократно используемый символ...

Поэтому я и подумал что может быть в МФС можно как-то иначе загрузить длл
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2013, 17:39
Цитата Сообщение от xman911 Посмотреть сообщение
думаю #include тут не поможет. притом
- инклуд был лиш указаем того что pragma comment должно идити сразу же после хедеров

Цитата Сообщение от xman911 Посмотреть сообщение
она не виндовая, а значит не загружена в память
- ну так как можно полагать что она заработает на NT?

Цитата Сообщение от xman911 Посмотреть сообщение
MemoryModule.h& MemoryModule.c
- я вообще таких функций не знаю, пишу в MFC ну лет 10 точно

Цитата Сообщение от xman911 Посмотреть сообщение
кстати если что под библиотекой имеется ввиду flash.ocx файл, AdobeFlash.
-погугли либо использование директивы #import либо вот наглядный пример как прикрутить ocx от Windows Media Player11 ActiveX Media Player mfc
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
04.02.2013, 17:39  [ТС]
собственно вот проект(стандартный мфс+ этот MemoryModule.h, MemoryModule.c) может у кого нить скомпилится.... тут вполне может быть нужно что-то в настройках проекта попроавить.... тольков от что?
Вложения
Тип файла: zip MFCApplication1.zip (141.4 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
04.02.2013, 17:41  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ибо вот наглядный пример как прикрутить ocx от Windows Media Player11 activex media player mfc
а он будет работать если на винде нет такого .ocx?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2013, 17:43
Цитата Сообщение от xman911 Посмотреть сообщение
а он будет работать если на винде нет такого .ocx?
- нет надо DLL-ка с этим компонентом, иначе програмка при запуске напишет - заданный ocx не найден либо не зарегестрирован в системе. На крайняк указанную DLL можно таскать вместе с програмкой
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
04.02.2013, 19:56  [ТС]
а нужно зашить осх в ресурс, потом его самому зарегать в винде и использовать... собственно такая вот задача непростая.
Если бы получилось скомпилить мой проект вместе с теми .с файлами - все бы получилось... но падла мфс ругается на них, а я не знаю что нужно и как настроить в проекте

Добавлено через 19 минут
интересно, а прокатит если попробовать зарегать самому? ну вот так:
C++
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
BOOL CFooApp::RegisterOCX(CString strName)
{
    HMODULE hModule = LoadLibrary((LPCTSTR)strName);
    CString strError;
 
    if (hModule == NULL)
    {
        strError = "LoadLibrary " + strName + " failed!";
        AfxMessageBox(strError);
        return FALSE;
    }
 
    FARPROC fp = GetProcAddress(hModule, "DllRegisterServer");
    if (fp == NULL)
    {
        strError = "Exported function DllRegisterServer not found!";
        AfxMessageBox(strError);
        return FALSE;
    }
 
    CoInitialize(NULL);
    HRESULT hRes = fp();
    if (SUCCEEDED(hRes))
    {
        return TRUE;
    }
 
    CoUninitialize();
    return FALSE;
}
Добавлено через 1 час 17 минут
вобщем нужно только скомпилировать этот MemoryModule.c как-то в MFC - это единственный способ загрузки активХ из ресурсов, походу. итак я потратил день - и все на том же месте((((

Добавлено через 8 минут
там получается вот так работать потом должно:
C++
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
CreateInstance(ID_OCX,L"BIN"); // так вызывается... ID_OCX - это осх-файл в ресурсах, BIN - это где он там лежит
 
HRESULT CreateInstance(UINT id , WCHAR* resType)
{
 
 
    if(hInst == NULL)
        return S_FALSE;
    if(isInit)
        return S_FALSE;
 
    IClassFactory* clf = NULL;
    HRSRC hResInfo = ::FindResource(hInst, MAKEINTRESOURCE(id), resType);
    if(!hResInfo)
        return S_FALSE;
 
    DWORD dwFlashOCXCodeSize = ::SizeofResource(hInst, hResInfo);
    if(dwFlashOCXCodeSize == 0)
        return S_FALSE;
 
    HGLOBAL data = ::LoadResource(hInst, hResInfo);
    if(!data)
        return S_FALSE;
 
    LPVOID lpFlashOCXCode = ::LockResource(data);
    if(!lpFlashOCXCode)
        return S_FALSE;
 
    HMEMORYMODULE hMem = MemoryLoadLibrary(lpFlashOCXCode); // это уже функции пошли из MemoryModule.c
    if(!hMem )
        return S_FALSE;
 
    LPGetClassObject fLPGetClassObject = (LPGetClassObject)MemoryGetProcAddress(hMem, "DllGetClassObject");
    if(!fLPGetClassObject )
        return S_FALSE;
 
    fLPGetClassObject(CLSID_ShockwaveFlash, IID_IClassFactory, (LPVOID*)&clf);
    if(!clf )
        return S_FALSE;
 
    HRESULT hr = clf->CreateInstance(NULL, __uuidof(IShockwaveFlash),(void**)&flash);
    clf->Release();
    isInit = hr == S_OK;
    return hr;
 
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2013, 23:48

Не по теме:

xman911, не смогу линкануть, у меня 2008-ая там нет CShellManager, CMFCVisualManager и т.д. Там был verrsc.h в самом MFCApplication1.rc убери его и по идеи всё будет линковаться



Добавлено через 2 минуты

Не по теме:

В любом случае самое основное в проекте class CMFCApplication1Dlg : public CDHtmlDialog это наследование того ActiveX о котором упоминал, верней наследование класса который аналогичен по функционалу IWebBrouser.

0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
05.02.2013, 12:06  [ТС]
короче получилось! все компилится!
Думаю у меня на работе просто студия слетела, так как пришел домой - и сделал все за час. Конечно потом были другие фаталы - но уже более явные и их получилось исправить.
А так советую всем, кому нужно грузить либу из ресурсов в память способ "MemoryModule". Так можно таскать только 1 .ехе и пофик зарегана ли либа на компе ранее. (конечно размерчик приложение будет пропорционален размеру либ)

вот источник
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
05.02.2013, 13:09
Цитата Сообщение от xman911 Посмотреть сообщение
А так советую всем, кому нужно грузить либу из ресурсов в память способ "MemoryModule". Так можно таскать только 1 .ехе и пофик зарегана ли либа на компе ранее. (конечно размерчик приложение будет пропорционален размеру либ)
что будет если запустить две,три копии программы

нормальный путь библиотека отдельно. тебя не прельшает?
если нужно в одном файле создай установщик или архив
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68
05.02.2013, 13:23  [ТС]
нормальный путь библиотека отдельно. тебя не прельшает?
В данном случае нет. как ты запустишь программу если ActiveX не зарегестрирован ренее в винде, и его вообще нет? что если пользователь удалит рядом лежащий .ocx-файл... В любом случае у меня задача использовать нужную либу независимо от того есть она на винде или нету + на выходе только .ехе файл. Есть способ другой? С удовольствием посмотрю)
и да, мне не нужно запускать 100 копий моей программы. будет запущенна только одна)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2013, 13:23
Помогаю со студенческими работами здесь

Загрузка ресурсов из библиотеки
Каким образом загрузить картинку из библиотеки в ресурсы запущенного приложения?

Библиотека из ресурсов библиотеки
Доброго времени суток! Есть ли возможность использовать стороннюю библиотеку, если добавить её в ресурсы собственной библиотеки? То есть, у...

Создание библиотеки ресурсов dll
Здравствуйте! Программа использует много графических ресурсов, потому хотелось бы &quot;запихнуть&quot; их в отдельную библиотеку dll и...

Планирование ресурсов проекта
Добрый день всем! Помогите кто-нибудь. В универе дали тему курсача &quot;Планирование ресурсного обеспечения проекта на примере&quot; может...

Вызов справки из ресурсов проекта
Всем привет, народ подскажите как из ресурсов проекта открыть файл справки (Help.chm)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru