//dll.cpp
CSomeClass obj;
extern "C" CAbstractParentOfSomeClass * __declspec(dllexport) GetClass()
{
return &obj;
}
Глобальные обьекты в dll
хочу задать такой вопрос:
Как будет вести себя следующий код?
CAbstractParentOfSomeClass - астрактыный класс
СSomeClass - наследуемый от него и реализующий вирт. методы
Код:
всмысле если я потом эту 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;
}
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;
}
то тот же вопрос если подключать динамически это библиотеку то не будет ли каких-нибудь косяков?
Цитата:
Originally posted by hell_admin
Доброго времени суток,
хочу задать такой вопрос:
Как будет вести себя следующий код?
CAbstractParentOfSomeClass - астрактыный класс
СSomeClass - наследуемый от него и реализующий вирт. методы
//dll.cpp
CSomeClass obj;
extern "C" CAbstractParentOfSomeClass * __declspec(dllexport) GetClass()
{
return &obj;
}
всмысле если я потом эту dll подключаю к нескольким приложениям, то для каждого приложения будет свой экземпляр obj или один на всех?
Доброго времени суток,
хочу задать такой вопрос:
Как будет вести себя следующий код?
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;
}
то тот же вопрос если подключать динамически это библиотеку то не будет ли каких-нибудь косяков?
для каждого поцесса будет создана своя копия
обьекта
почитай рихтера там найдешь все ответы
на свои вопросы
Цитата:
Originally posted by bas
один на всех
один на всех
Чего-то сомнительно...
Цитата:
Originally posted by GIZMO
Чего-то сомнительно...
Чего-то сомнительно...
ты прав
погарячился, посыпаю голову пеплом
Цитата:
Originally posted by GIZMO
Чего-то сомнительно...
Чего-то сомнительно...
Код вообще загадочный.
Если класс планирутся создавать как общедоступный то опуская все моменты и ошибки, как минимум должно так быть примерно(это файл длл):
Код:
#include "someclass.h"
extern CSomeClass *MyClass;
extern CSomeClass *MyClass;
и далее someclass.cpp
Код:
#pragma option -zRSHSEG
#pragma option -zTMYCLASS
#include "someclass.h"
CSomeClass *MyClass = new CSomeClass();
#pragma option -zTMYCLASS
#include "someclass.h"
CSomeClass *MyClass = new CSomeClass();
затем в def-файле
Код:
SEGMENTS
SHSEG CLASS 'MYCLASS' SHARED
SHSEG CLASS 'MYCLASS' SHARED
код привожу по памяти - под рукой нет рабочего - расшареную память как правило не ипользую - но приблизительно так это выглядит. Для более полного понимани - юзайте руководство разработчика по билдеру.