Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глобальные обьекты в dll

501
29 мая 2006 года
hell_admin
110 / / 02.10.2004
Доброго времени суток,
хочу задать такой вопрос:
Как будет вести себя следующий код?

CAbstractParentOfSomeClass - астрактыный класс
СSomeClass - наследуемый от него и реализующий вирт. методы
 
Код:
//dll.cpp

CSomeClass obj;

extern "C" CAbstractParentOfSomeClass * __declspec(dllexport) GetClass()
{
  return &obj;
}

всмысле если я потом эту dll подключаю к нескольким приложениям, то для каждого приложения будет свой экземпляр obj или один на всех?

и еще вопрос если в
DllMain или DllEntryPoint делать так:
Код:
// other dll.cpp
CAbstractParentOfSomeClass * obj = NULL;

BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
    switch(fwdreason)
    {
       case DLL_PROCESS_DETACH:
           delete obj;
        break;
       case DLL_PROCESS_ATTACH:
           obj = new CSomeClass();
        break;
    }
    return 1;
}

то тот же вопрос если подключать динамически это библиотеку то не будет ли каких-нибудь косяков?
15K
29 мая 2006 года
bas
22 / / 18.04.2006
Цитата:
Originally posted by hell_admin
Доброго времени суток,
хочу задать такой вопрос:
Как будет вести себя следующий код?

CAbstractParentOfSomeClass - астрактыный класс
СSomeClass - наследуемый от него и реализующий вирт. методы

//dll.cpp

CSomeClass obj;

extern "C" CAbstractParentOfSomeClass * __declspec(dllexport) GetClass()
{
return &obj;
}

всмысле если я потом эту dll подключаю к нескольким приложениям, то для каждого приложения будет свой экземпляр obj или один на всех?



один на всех

Цитата:

и еще вопрос если в
DllMain или DllEntryPoint делать так:

// other dll.cpp
CAbstractParentOfSomeClass * obj = NULL;

BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
switch(fwdreason)
{
case DLL_PROCESS_DETACH:
delete obj;
break;
case DLL_PROCESS_ATTACH:
obj = new CSomeClass();
break;
}
return 1;
}

то тот же вопрос если подключать динамически это библиотеку то не будет ли каких-нибудь косяков?



для каждого поцесса будет создана своя копия
обьекта

почитай рихтера там найдешь все ответы
на свои вопросы

246
29 мая 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by bas
один на всех


Чего-то сомнительно...

15K
29 мая 2006 года
bas
22 / / 18.04.2006
Цитата:
Originally posted by GIZMO
Чего-то сомнительно...



ты прав
погарячился, посыпаю голову пеплом

1
30 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by GIZMO
Чего-то сомнительно...


Код вообще загадочный.
Если класс планирутся создавать как общедоступный то опуская все моменты и ошибки, как минимум должно так быть примерно(это файл длл):

 
Код:
#include "someclass.h"
extern CSomeClass *MyClass;

и далее someclass.cpp
 
Код:
#pragma option -zRSHSEG
#pragma option -zTMYCLASS
#include "someclass.h"
CSomeClass *MyClass = new CSomeClass();

затем в def-файле
 
Код:
SEGMENTS
 SHSEG CLASS 'MYCLASS' SHARED

код привожу по памяти - под рукой нет рабочего - расшареную память как правило не ипользую - но приблизительно так это выглядит. Для более полного понимани - юзайте руководство разработчика по билдеру.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог