Доброго времени суток,
в общем такая проблема, я не совсем знаю как реализовать,
задача:
создать сом объект, что бы он был общий для все приложений, т.е, вновь созданные процессы
получали именно этот объект а не новый его экземпляр, реализовать в принцыпе все равно на чем
или С++ или VB, не важно
Можно или пример или ссылочку
Спасибо большое......
Здравствуйте, <Аноним>, Вы писали:
А>Доброго времени суток, А>в общем такая проблема, я не совсем знаю как реализовать, А>задача: А> создать сом объект, что бы он был общий для все приложений, т.е, вновь созданные процессы А>получали именно этот объект а не новый его экземпляр, реализовать в принцыпе все равно на чем А>или С++ или VB, не важно А> Можно или пример или ссылочку А>Спасибо большое...... Шаблон проектирования “Одиночка” (Singleton) в ATL приложениях
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток, А>в общем такая проблема, я не совсем знаю как реализовать, А>задача: А> создать сом объект, что бы он был общий для все приложений, т.е, вновь созданные процессы А>получали именно этот объект а не новый его экземпляр, реализовать в принцыпе все равно на чем А>или С++ или VB, не важно А> Можно или пример или ссылочку А>Спасибо большое......
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток, А>в общем такая проблема, я не совсем знаю как реализовать, А>задача: А> создать сом объект, что бы он был общий для все приложений, т.е, вновь созданные процессы А>получали именно этот объект а не новый его экземпляр, реализовать в принцыпе все равно на чем А>или С++ или VB, не важно
Все дело в реализации фабрики класса в ATL дабавляешь макрос
DECLARE_CLASSFACTORY_SINGLETON(CMyClass)
и реализуешь все что тебе надо от этого класса
Если захочешь без ATL то делаешь, так чтобы CreateInstance
в твоей фабрике классов возвращал постоянно ссылку на один и тот же обект
не создавая новый http://clubpro.spb.ru/cominside/index.html
хорошая рассылка когда-то была жаль ща молчит
Спасибо за совет, но вот еще одни вопрос
делаю так
class ATL_NO_VTABLE CCSingle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCSingle, &CLSID_CSingle>,
public IDispatchImpl<ICSingle, &IID_ICSingle, &LIBID_SINGLELib>
{
private:
int iTest;
public:
CCSingle()
{
iTest = 0;
}
DECLARE_CLASSFACTORY_SINGLETON(CCSingle)
DECLARE_REGISTRY_RESOURCEID(IDR_CSINGLE)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CCSingle)
COM_INTERFACE_ENTRY(ICSingle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// ICSingle
public:
STDMETHOD(Test)(/*[in]*/ int i);
};
STDMETHODIMP CCSingle::Test(int i)
{
// TODO: Add your implementation code here
iTest += i;
char* buf = new char[20];
itoa(iTest, buf, 10);
MessageBox(NULL, (LPCSTR)buf,"test", MB_OK);
delete[] buf;
return S_OK;
}
запускаю два приложения которые создают объект
(вызываю из vb)
и по клику на кнопку вызывают метод тест, если
соответственно первый возвращает 10. 20. 30
и второй тоже 10, 20 , 30
а надо что бы второй возвращал 40,50, 60
только сильно не пинайте если чего не понял я.
Спасибо.
Bai>запускаю два приложения которые создают объект (вызываю из vb) и по клику на кнопку вызывают метод тест, если
Bai>соответственно первый возвращает 10. 20. 30 и второй тоже 10, 20 , 30 а надо что бы второй возвращал 40,50, 60
Чтобы получить синглетон для процессов, нужно сервер делать out_proc сервером, т.е. EXE-шником. Иначе будет синглетон для процесса, отдельно для каждого.
Здравствуйте, Аноним, Вы писали:
А>Помогите плз, А>ничего не получается ....... А>АУУУУ.
Необязательно делать exe сервер.
При создании объекта можно сначала вызывать GetActiveObject с CLSID нужного класса.
Если ничего не нашлось, то создавать новый объект.
Объект в конструкторе должен звать RegisterActiveObject, а в деструкторе RevokeActiveObject. Нормально работает и с in-proc серверами.
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Bai, Вы писали:
Vi2>
Bai>>запускаю два приложения которые создают объект (вызываю из vb) и по клику на кнопку вызывают метод тест, если
Bai>>соответственно первый возвращает 10. 20. 30 и второй тоже 10, 20 , 30 а надо что бы второй возвращал 40,50, 60
Vi2>Чтобы получить синглетон для процессов, нужно сервер делать out_proc сервером, т.е. EXE-шником. Иначе будет синглетон для процесса, отдельно для каждого.
Огромное спасибо.
Сделал out_proc, все работает!