Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DLL 
:(
    Опции темы
Lekxys
  Дата 4.8.2003, 19:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











как обединять файлы в DLL после компиляции? sad.gif
  Вверх
mr.DUDA
Дата 4.8.2003, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Хм, просто выбираешь тип приложения "DLL" при создании. А вручную сделать это можно, слинковав *.obj-файлы с соотв. ключами (потребуется еще и список экспортируемых ф-ций в DEF-файле)


--------------------
user posted image
PM MAIL WWW   Вверх
RetRon
Дата 5.8.2003, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Не понял какие ключи обоснуй на примере

PM MAIL   Вверх
RetRon
Дата 5.8.2003, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Мне это тоже как-то надо. Я просто изуаю C++ только месяц где-то и нифига не понимаю!
PM MAIL   Вверх
mr.DUDA
Дата 5.8.2003, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Пжалста.
Если линкуешь tlink32.exe, то пишешь "/Tpe", если MS link.exe, то "/DLL". Глянь в меню VC "Project/Settings/Link" для полного списка ключей (внизу окна).

Хотя, как я и говорил, правильно будет при создании проекта выбрать "Dynamic-Link library" (нафига компилить и линковать вручную, если VC делает все сам ?)


--------------------
user posted image
PM MAIL WWW   Вверх
RetRon
Дата 5.8.2003, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



А если попонятние (не все такие "Мозговитые" как ты ведь)

Ты написал "Люди учите C++"

А для этого надо

1.Книги

2.На книги деньги

3.На деньги работа

4.На работу хотя-бы 16 лет, а есле тебе 14

Проше ведь спросить у того кто знает!

флейм
PM MAIL   Вверх
RetRon
Дата 5.8.2003, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Чуть не забыл объясни еще как делать заклатки в диалоговых окнах на VC

P.s. НЕ в Builder'е

P.s.s Тоже попонятнее
PM MAIL   Вверх
mr.DUDA
Дата 5.8.2003, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Насчет "как сделать DLL". Выбираешь в VC меню File/New.../Projects/MFC AppWizard(DLL), выбираешь имя и путь для проекта, давишь "Ok", "Finish", "Ok".

Открываешь закладку с файлами "Source files", видишь 4 файла, из них 2 - ".cpp", из них 1 "StdAfx.cpp", а второй --- то, что нам нужно. Итак, ты видишь бааааалшую мессагу как писАть экспортируемые функции, даж с примером. Вот и отлично.

Копируй этот пример куда-нибудь вниз, раскомментируй все его строки - получишь функцию "ExportedFunction". Однако, т.к. нам не нужна возня с DEF-файлом, следующее что ты сделаешь - перепишешь эту функцию так:
Код

extern "C" void __declspec(dllexport) ExportedFunction()
{
     AFX_MANAGE_STATE(AfxGetStaticModuleState());
     // normal function body here
}

Всё, можно компилить smile.gif.


В результате компиляции в папке "Debug" будет лежать твоя DLL-ка, а вытянуть из нее функцию "ExportedFunction" можно так (сначала скопируй DLL-ку в папку SYSTEM или SYSTEM32 Винды, или же в ту папку, где лежит EXE'шка, юзающая твою DLL'ку):
Код
       // какая-нибудь функция какой-нибудь EXE'шки
       // загружаем нашу DLL (например 123.dll) и вызываем ExportedFunction
       HMODULE hDLL = ::LoadLibrary("123.dll");
       if(hDLL)    // если DLL'ка загрузилась
       {
            // получаем указатель на функцию ExportedFunction
            void (*pfnExportedFunction)() = (void (*)()) GetProcAddress(hDLL, "ExportedFunction");
            // вызываем нашу функцию из DLL
            if(pfnExportedFunction != NULL)      // если конечно она там нашлась
                   (*pfnExportedFunction)();
            // выгружаем DLL
            ::FreeLibrary(hDLL);
        }

Если ты хочешь передавать какие-то параметры в твою DLL-функцию и получать обратно значение, это делается так:
Код

       // в DLL'ке
       extern "C"  BOOL  __declspec(dllexport)  OtherFunc(int i)
       {
             AFX_MANAGE_STATE(AfxGetStaticModuleState());
             // ... что-нибудь внутри твоей функции
             // можешь юзать переменную "i" ...
             return TRUE;      // а можно и FALSE  :)
       }

         // в EXE'шке
        if(hDLL)
        {
             BOOL (*pfnOther)(int) = (BOOL (*)(int)) GetProcAddress(hDLL, "OtherFunc");
            // вызываем нашу функцию из DLL
            if(pfnOther != NULL)      // если конечно она там нашлась
                   BOOL result = (*pfnOther)(123456);   // вызов ф-ции с параметром
         }


Насчет закладок --- места уже не хватит smile.gif

Делается либо с пом. CPropertySheet/CPropertyPage, либо CTabCtrl. Почитай книги по MFC или на http://www.firststeps.ru в разделе "VC++", а потом спрашивай, что непонятно, Ok ?

Это сообщение отредактировал(а) mr.DUDA - 5.8.2003, 17:22


--------------------
user posted image
PM MAIL WWW   Вверх
RetRon
Дата 5.8.2003, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Не, не то я создал прогу на базе диалогового окна MFC AppWizard(exe) и мне надо теперь файлы .pch .res .obj .ilk .idb .pdb объединить в DLL, а файл .exe запускал DLL

Если все нармально скажи какие файлы надо таскать на дискете, а то один exe сообщает что что-то там не найдено

Посмотрел ссылку нету того что надо

Мне как бы надо создать переключатели (их я делать умею), но мне нужен код каторый при переключении очистил ListBox
типа Переключатель 1(Radio Button) Выводил список игр, а Переключатель 2 список Фильмов, переключив назад опять выдовал список игр
PM MAIL   Вверх
mr.DUDA
Дата 5.8.2003, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



По-моему, так "запросто" сделать из OBJ-файлов, скомпилированных для EXE, библиотеку DLL нельзя.

Зато можно сделать проект MFC DLL (как я описал выше), потом взять из твоего существующего EXE-проекта все .h и .cpp файлы, кроме stdafx и ...app, вставить их в DLL проект, импортировать ресурсы из твоего EXE'шного resource.h, и наконец, сделать экспортируемую ф-цию, единственным содержанием и назначением которой будет вывод твоего диалогового окна:
Код

extern "C"  int  __declspec(dllexport)  OtherFunc(int i)
{
        AFX_MANAGE_STATE(AfxGetStaticModuleState());

        CMyDlg    dlg;        
        return   dlg.DoModal();
}

Вместо CMyDlg будет класс твоего диалога из EXE. Само собой, что нужно включить в главный .cpp библиотеки заголовочный файл типа "MyDlg.h".

Народ, если кто знает, как легче сделать то, что просит RetRon, напишите плз wink.gif

А насчет переключателей - это же обычные кнопки (класс является производным от CButton), только объединенные в одну группу. Вешаешь обработчик "OnClickRadioXXX" на каждый из переключателей, и в нем меняешь содержимое ListBox'а (как это делается, знаешь ?)



--------------------
user posted image
PM MAIL WWW   Вверх
RetRon
Дата 6.8.2003, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Как создать оброботчик через ClassWizard я знаю, но незнаю какой код отвечает за обнавление ListBox'a и его востоновление
PM MAIL   Вверх
RetRon
Дата 6.8.2003, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



extern "C" int __declspec(dllexport) OtherFunc(int i)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CPriseListApp dlg; - вставил CPriseListDlg 4 ошибки
return dlg.DoModal();
}

Проверь что не так VC говорит что

'DoModal' : is not a member of 'CPriseListApp'


PM MAIL   Вверх
RetRon
Дата 6.8.2003, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.8.2003

Репутация: нет
Всего: нет



Если че тавай я отошлю тебе что получилось, а ты исправишь

P.s если ты конечно не против, если против я поиму т.к. ты мне ничем и никак не обязан

P.s.s народ не знаете где можно скачать фильмы без Edonkey?
PM MAIL   Вверх
mr.DUDA
Дата 6.8.2003, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Скинь мне на мыло всё что у тебя есть по этому проекту и пару слов, чего тебе не хватает smile.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Baa
Дата 8.8.2003, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Тема закрыта, ибо началась бодяга... нарушили много всего... читайте правила, блин... стоит токо ненадолго отлучиться, как балаган устраивают...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0734 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.