0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 68

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

04.02.2013, 14:47. Показов 2317. Ответов 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru