Форум программистов, компьютерный форум CyberForum.ru

Почему нельзя переделать dll в exe, изменив входную функцию? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
08.03.2013, 00:13     Почему нельзя переделать dll в exe, изменив входную функцию? #1
Да почему?
Прикладываю проект, он очень прост. Вот на всякий случай код *.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"   
#define WIN32_LEAN_AND_MEAN 
#include <windows.h>
 
 
//int main () {
//    return 0;
//}
 
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                               ){
    return TRUE;
}
 
 
int DllGetClassObject(){
   return 0;
}
Скомпильте, скомпилится без ошибок. А теперь вместо DllMain подставьте main (она пока закомпилена), ага. Ошибок ТАКЖЕ не будет, как не будет и экзешника, а как была dll-ка, так и останется.

В чём дело? Если компилятор берёт на себя смелость распознавать конечный проект по прототипу входной функции (компилит ведь без ошибок), почему же он его не кропает, конечный проект-то?

Спасибо, кто откликнется.
Вложения
Тип файла: rar dll_i_exe.rar (5.65 Мб, 4 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
08.03.2013, 00:24  [ТС]     Почему нельзя переделать dll в exe, изменив входную функцию? #2
А, разобрался, там в свойствах проекта надо было указать что на выходе ожидается *.exe
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.03.2013, 00:24     Почему нельзя переделать dll в exe, изменив входную функцию? #3

Не по теме:

когда передаешь кому-то проект студии то удаляй файл *.sdf, а так же папки Debug/Release/ipch


Цитата Сообщение от kravam Посмотреть сообщение
Скомпильте, скомпилится без ошибок. А теперь вместо DllMain подставьте main (она пока закомпилена), ага. Ошибок ТАКЖЕ не будет, как не будет и экзешника, а как была dll-ка, так и останется.
а с чего бы должен появится экзешник? имя точки входа никак не влияет на то что будет в результате экзешник или длл
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
08.03.2013, 02:23     Почему нельзя переделать dll в exe, изменив входную функцию? #4
Ну а ты с консоли(ручками) компилируешь что ли ?
-Нет вот и загляни в файл проекта dll и обычного проекта, найди отличия...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
08.03.2013, 02:32  [ТС]     Почему нельзя переделать dll в exe, изменив входную функцию? #5
Jupiter,
Я бы по-другому объяснил.
Если задать задание создать*.dll, тогда компоновщик будет искать такую функцию:

C++
1
2
3
BOOL APIENTRY DllMain( HANDLE hModule, 
//                       DWORD  ul_reason_for_call, 
//                       LPVOID lpReserved)                            )
Если он её не находит, оно просто подставляет вместо неё стандартную (по аналогии с конструктором по умолчанию для классов. Если программист не написал конструктор, компилятор подставит встроенный), и в этом случае ВСЕ ОСТАЛЬНЫЕ функции НЕ РАССМАТРИВАЮТСЯ как кандидаты на точку входа. И всё равно, main- не main. Вышеуказанной функции нет- подставляется встроенная.

А main (если есть) в этом случае рассматривается как ОДНА ИЗ рядовых функций. Это мой случай. Я думал что она и будет точкой входа и ожидал, что соответственно создастся экзешник, но я ошибался.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Ну а ты с консоли(ручками) компилируешь что ли ?
-Нет вот и загляни в файл проекта dll и обычного проекта, найди отличия...
чего?
Yandex
Объявления
08.03.2013, 02:32     Почему нельзя переделать dll в exe, изменив входную функцию?
Ответ Создать тему
Опции темы

Текущее время: 04:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru