Один объектный файл для приложения (exe) и библиотеки (dll)
От: NWhisper  
Дата: 14.11.06 04:47
Оценка:
Всем привет! Встал интересный вопрос, можно ли так сделать на Visual C++?

Допустим, есть заголовочный файл:
//file1.h
class API App
{
public:
    void foo();
}

И есть исходник:
//file1.cpp
#define API
#include "file1.h"
void App::foo()
{}

После выполнения cl /MD file1.cpp получается файл file1.obj.

Далее, пишем еще один исходник:
//file2.cpp
#define API __declspec(dllexport)
#include "file1.h"

После сборки этого исходника командой cl /LD /MD file2.cpp /link file.obj появляется file2.dll, которая не экспортирует App::foo.

Может кто-нибудь сказать почему не экспортируется App::foo?
Re: Один объектный файл для приложения (exe) и библиотеки (d
От: denaturat  
Дата: 14.11.06 07:51
Оценка:
Здравствуйте, NWhisper, Вы писали:

NW>Всем привет! Встал интересный вопрос, можно ли так сделать на Visual C++?


NW>Допустим, есть заголовочный файл:

NW>
NW>//file1.h
NW>class API App
NW>{
NW>public:
NW>    void foo();
NW>}
NW>

NW>И есть исходник:
NW>
NW>//file1.cpp
NW>#define API
NW>#include "file1.h"
NW>void App::foo()
NW>{}
NW>

NW>После выполнения cl /MD file1.cpp получается файл file1.obj.

NW>Далее, пишем еще один исходник:

NW>
NW>//file2.cpp
NW>#define API __declspec(dllexport)
NW>#include "file1.h"
NW>

NW>После сборки этого исходника командой cl /LD /MD file2.cpp /link file.obj появляется file2.dll, которая не экспортирует App::foo.

NW>Может кто-нибудь сказать почему не экспортируется App::foo?


1. Как определил, что не экспортируется?
2. Все должно быть в порядке, если же ты будешь использовать этот класс из другого модуля, то в его объявлении надо будет ставить __declspec(dllimport)
Re: Один объектный файл для приложения (exe) и библиотеки (d
От: rm822 Россия  
Дата: 14.11.06 09:57
Оценка:
Здравствуйте, NWhisper, Вы писали:

NW>Допустим, есть заголовочный файл:

NW>
NW>//file1.cpp
NW>#define API
NW>#include "file1.h"
API void App::foo()
NW>{}
NW>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Один объектный файл для приложения (exe) и библиотеки
От: NWhisper  
Дата: 14.11.06 15:49
Оценка:
D>1. Как определил, что не экспортируется?
D>2. Все должно быть в порядке, если же ты будешь использовать этот класс из другого модуля, то в его объявлении надо будет ставить __declspec(dllimport)

Определяю с помощью dumpbin
dumpbin /exports file2.dll
Re[2]: Один объектный файл для приложения (exe) и библиотеки
От: NWhisper  
Дата: 14.11.06 15:49
Оценка:
Здравствуйте, rm822, Вы писали:

R>Здравствуйте, NWhisper, Вы писали:


NW>>Допустим, есть заголовочный файл:

NW>>
NW>>//file1.cpp
NW>>#define API
NW>>#include "file1.h"
R>API void App::foo()
NW>>{}
NW>>


Не помогло.
Еще варианты?
Re: Один объектный файл для приложения (exe) и библиотеки (d
От: NWhisper  
Дата: 16.11.06 10:37
Оценка:
Ну где же вы, профессионалы? Что ж вы все только фары умеете протирать да колеса пинать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.