Проблема линковки
От: said222  
Дата: 24.01.08 15:47
Оценка:
Суть такова:
Есть 2 проекта exe и dll. Dll зависит от exe. В ехе подключеная либа, создаваемая с длл. А как мне нужно объявить объект класса из ехе(глобальный), чтобы им можно было пользоваться в длл? (Объект класса Log объявлен в exe, но он требуется и в длл. Переносить его в длл не хочется, потому что если пояится еще одна длл то нужно будет его использовать и там, а подключать либу от первой длл во вторую только из-за лога не хочется. И синглтон тоже не нужен.)
Re: Проблема линковки
От: IROV..  
Дата: 24.01.08 16:00
Оценка: +1
Здравствуйте, said222, Вы писали:

S>Суть такова:

S>Есть 2 проекта exe и dll. Dll зависит от exe. В ехе подключеная либа, создаваемая с длл. А как мне нужно объявить объект класса из ехе(глобальный), чтобы им можно было пользоваться в длл? (Объект класса Log объявлен в exe, но он требуется и в длл. Переносить его в длл не хочется, потому что если пояится еще одна длл то нужно будет его использовать и там, а подключать либу от первой длл во вторую только из-за лога не хочется. И синглтон тоже не нужен.)

Сделай pure-virtual class Log
Создай в exe объект такого класса.
И передай указатель в dll

я не волшебник, я только учусь!
Re[2]: Проблема линковки
От: said222  
Дата: 24.01.08 16:13
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>Сделай pure-virtual class Log

IRO>Создай в exe объект такого класса.
IRO>И передай указатель в dll

IRO>


Спасибо,
сейчас попробую.
Re[2]: Проблема линковки
От: MasterZiv СССР  
Дата: 24.01.08 17:14
Оценка: :)
IROV.. wrote:
> Сделай pure-virtual class Log
> Создай в exe объект такого класса.
> И передай указатель в dll

Вовсе не обязательно городить везде a la COM.
__declspec(__dllexport/__dllimport)
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Проблема линковки
От: IROV..  
Дата: 24.01.08 17:19
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Вовсе не обязательно городить везде a la COM.

MZ>__declspec(__dllexport/__dllimport)
Эххх, и получим мы

application.exe
application.lib

и будем счасливы

и exe будет ссылатся на dll который в свою очередь на exe
я не волшебник, я только учусь!
Re[4]: Проблема линковки
От: said222  
Дата: 24.01.08 19:20
Оценка:
IRO>и exe будет ссылатся на dll который в свою очередь на exe

Вот этого как раз совершенно не хочется...
Re[2]: Проблема линковки
От: said222  
Дата: 24.01.08 21:31
Оценка:
Здравствуйте, IROV.., Вы писали:

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


S>>Суть такова:

S>>Есть 2 проекта exe и dll. Dll зависит от exe. В ехе подключеная либа, создаваемая с длл. А как мне нужно объявить объект класса из ехе(глобальный), чтобы им можно было пользоваться в длл? (Объект класса Log объявлен в exe, но он требуется и в длл. Переносить его в длл не хочется, потому что если пояится еще одна длл то нужно будет его использовать и там, а подключать либу от первой длл во вторую только из-за лога не хочется. И синглтон тоже не нужен.)

IRO>Сделай pure-virtual class Log

IRO>Создай в exe объект такого класса.
IRO>И передай указатель в dll

А можно небольшой пример кода, я что-то совсем запутался.
ЗЫ: С меня пиво.
Re[3]: Проблема линковки
От: IROV..  
Дата: 25.01.08 11:36
Оценка:
Здравствуйте, said222, Вы писали:

S>А можно небольшой пример кода, я что-то совсем запутался.

S>ЗЫ: С меня пиво.


class DllClass
{
public:
    void initializeLog( Log * _log );
};

class Log
{
public:
    virtual void message( const char * _string ) = 0;
};

class LogPrintf
    : public Log
{
public:
    void message( const char * _string ) override // override - MSVC specify
    {
        printf( _string );
    }
};

void main()
{
    DllClass a;
    Log * log = new LogPrintf;
    a.initializeLog( log );
}


я не волшебник, я только учусь!
Re[4]: Проблема линковки
От: said222  
Дата: 25.01.08 12:42
Оценка:
IRO>
IRO>class DllClass
IRO>{
IRO>public:
IRO>    void initializeLog( Log * _log );
IRO>};

IRO>class Log
IRO>{
IRO>public:
IRO>    virtual void message( const char * _string ) = 0;
IRO>};

IRO>class LogPrintf
IRO>    : public Log
IRO>{
IRO>public:
IRO>    void message( const char * _string ) override // override - MSVC specify
IRO>    {
IRO>        printf( _string );
IRO>    }
IRO>};

IRO>void main()
IRO>{
IRO>    DllClass a;
IRO>    Log * log = new LogPrintf;
IRO>    a.initializeLog( log );
IRO>}
IRO>


IRO>


Спасибо огромнейшее, буду в Киеве — обязательно завезу настоящего чешского "Старопрамен'а".
Re[5]: Проблема линковки
От: IROV..  
Дата: 25.01.08 15:24
Оценка:
Здравствуйте, said222, Вы писали:
S>Спасибо огромнейшее, буду в Киеве — обязательно завезу настоящего чешского "Старопрамен'а".
мое любимое пиво
я не волшебник, я только учусь!
Re[3]: Проблема линковки
От: Аноним  
Дата: 28.01.08 19:53
Оценка:
Здравствуйте, said222, Вы писали:

IRO>>Сделай pure-virtual class Log

IRO>>Создай в exe объект такого класса.
IRO>>И передай указатель в dll

S>А можно небольшой пример кода, я что-то совсем запутался.

S>ЗЫ: С меня пиво.

На досуге погуглите Dependency Injection и попейте пива
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.