Написал com сервер на vc. при написании клиента на vc проблем нет.
начал писать клиент на vb. делаю:
Dim obj As Object
Set obj = CreateObject("Com.Server.1")
и vb ругается "Object required". Что ему надо? Ведь он же его нашел.
Здравствуйте Rainbow, вы писали:
R>Написал com сервер на vc. при написании клиента на vc проблем нет. R>начал писать клиент на vb. делаю: R>Dim obj As Object R>Set obj = CreateObject("Com.Server.1") R>и vb ругается "Object required". Что ему надо? Ведь он же его нашел.
Здравствуйте Ростислав Глухов, вы писали:
R>>Написал com сервер на vc. при написании клиента на vc проблем нет. R>>начал писать клиент на vb. делаю: R>>Dim obj As Object R>>Set obj = CreateObject("Com.Server.1") R>>и vb ругается "Object required". Что ему надо? Ведь он же его нашел.
РГ>Попробуйте Dim obj As new Com.Server
ругается, что тип не определен.
может надо как-нибудь по хитрому сам сервер компилировать?
он у меня на одном WinAPI написан, без всяких mfc, atl и т.д.
Здравствуйте Ростислав Глухов, вы писали:
РГ>Здравствуйте Rainbow, вы писали: R>>ругается, что тип не определен. РГ>Укажите Вашу DLL в Project/References
Здравствуйте Rainbow, вы писали:
РГ>>Укажите Вашу DLL в Project/References R>Пишет "Can't a reference to the specified file"
А в списке "Available References" Вашего Com.Server нет?
R>а для "позднего" связывания разве это надо?
Для позднего связывания этого не надо, но какие там камни, я неочень представляю
Здравствуйте Ростислав Глухов, вы писали:
РГ>>>Укажите Вашу DLL в Project/References R>>Пишет "Can't a reference to the specified file" РГ>А в списке "Available References" Вашего Com.Server нет?
нет
R>>а для "позднего" связывания разве это надо? РГ>Для позднего связывания этого не надо, но какие там камни, я неочень представляю
idl файл случайно не надо в vc делать для сервера?
Здравствуйте Rainbow, вы писали:
R>Здравствуйте Ростислав Глухов, вы писали:
РГ>>>>Укажите Вашу DLL в Project/References R>>>Пишет "Can't a reference to the specified file" РГ>>А в списке "Available References" Вашего Com.Server нет?
R>нет
R>>>а для "позднего" связывания разве это надо? РГ>>Для позднего связывания этого не надо, но какие там камни, я неочень представляю
R>idl файл случайно не надо в vc делать для сервера?
Я обычно встраиваю tlb в dll
В ATL это поумолчанию
И как позднее, так и раннее связывания работают нормально
Здравствуйте Ростислав Глухов, вы писали:
R>>idl файл случайно не надо в vc делать для сервера?
РГ>Я обычно встраиваю tlb в dll РГ>В ATL это поумолчанию РГ>И как позднее, так и раннее связывания работают нормально
Здравствуйте Rainbow, вы писали:
R>Здравствуйте Ростислав Глухов, вы писали:
РГ>>Я обычно встраиваю tlb в dll РГ>>В ATL это поумолчанию РГ>>И как позднее, так и раннее связывания работают нормально
R>а как его создать/вставить в dll?
У меня ATL Wizard сгенерил в .rc файле такие строки:
3 TEXTINCLUDE DISCARDABLE
BEGIN
"1 TYPELIB ""MySuper.tlb""\r\n"
"\0"
END
Здравствуйте Ростислав Глухов, вы писали:
R>>а как его создать/вставить в dll? РГ>У меня ATL Wizard сгенерил в .rc файле такие строки: РГ>3 TEXTINCLUDE DISCARDABLE РГ>BEGIN РГ> "1 TYPELIB ""MySuper.tlb""\r\n" РГ> "\0" РГ>END
первоначально у меня вообще небыло ресурсов. их добавление и изменение по типу вышесказанного ничего не дало.
Здравствуйте Rainbow, вы писали:
R>Написал com сервер на vc. при написании клиента на vc проблем нет. R>начал писать клиент на vb. делаю: R>Dim obj As Object R>Set obj = CreateObject("Com.Server.1") R>и vb ругается "Object required". Что ему надо? Ведь он же его нашел.
Маловато информации...
Как там дела в реестре? Что за Com-объект? Какой у него интерфейс поумолчанию?
Здравствуйте Сергеев Дмитрий Николаевич, вы писали:
СДН>Маловато информации... СДН>Как там дела в реестре? Что за Com-объект? Какой у него интерфейс поумолчанию?
Ага! Код в студию. ;o)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, вы писали:
СДН>>Маловато информации... СДН>>Как там дела в реестре? Что за Com-объект? Какой у него интерфейс поумолчанию? VD>Ага! Код в студию. ;o)
ну код так код :) :
// comsrv.h#include"icomsrv.h"extern long g_lObjs;
extern long g_lLocks;
class ComServer : public IComServer
{
protected:
long m_lRef;
public:
ComServer();
~ComServer();
public:
// IUnknown
STDMETHOD(QueryInterface( REFIID, void** ));
STDMETHOD_(ULONG, AddRef());
STDMETHOD_(ULONG, Release());
// IComServer
STDMETHOD(Connection(void));
STDMETHOD(InitADO(void));
STDMETHOD(DeInitADO(void));
STDMETHOD(RunSQL(char*));
STDMETHOD(GetRows(int*));
STDMETHOD(GetColumns(int*));
STDMETHOD(GetVal(int,int,char*));
STDMETHOD(GetNameColumn(char*,int));
};
class ComServerClassFactory : public IClassFactory
{
protected:
long m_lRef;
public:
ComServerClassFactory();
~ComServerClassFactory();
// IUnknown
STDMETHOD( QueryInterface(REFIID, void** ));
STDMETHOD_(ULONG, AddRef());
STDMETHOD_(ULONG, Release());
// IClassFactory
STDMETHOD( CreateInstance(LPUNKNOWN, REFIID, void**));
STDMETHOD( LockServer(BOOL));
};
Здравствуйте VVV, вы писали:
VVV>Здравствуйте Rainbow, вы писали:
R>>вообще-то я уже это переписал с помощью ATL, но все равно интересно.
VVV>так надо ж от IDispatch сервер наследовать и реализовать его (и библиотеку типов), Бейсик то работает через Automation.
Однако, VVV прав.
Но сказать хочется другое. Этот сервер — это проба пера? Или нужен для дела?
Если первое, то разбирайся дальше... Если второе, то кончай заниматься мазохизмом и сгенери проект ATL-ным визардом. Он (ATL-ный визард) и tlb создаст и Automation-совместимость обеспечит. Так что останется только реализовать логику.
PS
А изучать в ATL-е, тоже есть чего...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, вы писали:
R>>>вообще-то я уже это переписал с помощью ATL, но все равно интересно. VVV>>так надо ж от IDispatch сервер наследовать и реализовать его (и библиотеку типов), Бейсик то работает через Automation. VD>Однако, VVV прав. VD>Но сказать хочется другое. Этот сервер — это проба пера? Или нужен для дела? VD>Если первое, то разбирайся дальше... Если второе, то кончай заниматься мазохизмом и сгенери проект ATL-ным визардом. Он (ATL-ный визард) и tlb создаст и Automation-совместимость обеспечит. Так что останется только реализовать логику.
Здравствуйте DNS, вы писали:
DNS>Здравствуйте Rainbow, вы писали:
R>>надо для дела. но это и первый мой com. :)
DNS>Раз надо для дела, так бросай MFC. Лабораторные на нём только писать :))
Откуда ты взял, что он его на MFC написал? Ну, да ладно... все равно в целом ты прав преходить на ATL — ОДНОЗНААААЧНААА!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте DNS, вы писали:
R>>надо для дела. но это и первый мой com. :) DNS>Раз надо для дела, так бросай MFC. Лабораторные на нём только писать :))