проблема с COM
От: Rainbow  
Дата: 24.09.01 05:46
Оценка:
Написал com сервер на vc. при написании клиента на vc проблем нет.
начал писать клиент на vb. делаю:
Dim obj As Object
Set obj = CreateObject("Com.Server.1")
и vb ругается "Object required". Что ему надо? Ведь он же его нашел.
Re: проблема с COM
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.09.01 06:25
Оценка:
Здравствуйте Rainbow, вы писали:

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
- А Вы что курите?
— Минздрав предупреждает
Re[2]: проблема с COM
От: Rainbow  
Дата: 24.09.01 06:48
Оценка:
Здравствуйте Ростислав Глухов, вы писали:

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 и т.д.
Re[3]: проблема с COM
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.09.01 06:54
Оценка:
Здравствуйте Rainbow, вы писали:


R>ругается, что тип не определен.


Укажите Вашу DLL в Project/References
- А Вы что курите?
— Минздрав предупреждает
Re[4]: проблема с COM
От: Rainbow  
Дата: 24.09.01 06:58
Оценка:
Здравствуйте Ростислав Глухов, вы писали:

РГ>Здравствуйте Rainbow, вы писали:

R>>ругается, что тип не определен.
РГ>Укажите Вашу DLL в Project/References

Пишет "Can't a reference to the specified file"

а для "позднего" связывания разве это надо?
Re[5]: проблема с COM
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.09.01 07:12
Оценка:
Здравствуйте Rainbow, вы писали:

РГ>>Укажите Вашу DLL в Project/References

R>Пишет "Can't a reference to the specified file"

А в списке "Available References" Вашего Com.Server нет?

R>а для "позднего" связывания разве это надо?

Для позднего связывания этого не надо, но какие там камни, я неочень представляю
- А Вы что курите?
— Минздрав предупреждает
Re[6]: проблема с COM
От: Rainbow  
Дата: 24.09.01 07:26
Оценка:
Здравствуйте Ростислав Глухов, вы писали:

РГ>>>Укажите Вашу DLL в Project/References

R>>Пишет "Can't a reference to the specified file"
РГ>А в списке "Available References" Вашего Com.Server нет?

нет

R>>а для "позднего" связывания разве это надо?

РГ>Для позднего связывания этого не надо, но какие там камни, я неочень представляю

idl файл случайно не надо в vc делать для сервера?
Re[7]: проблема с COM
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.09.01 08:51
Оценка:
Здравствуйте 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 это поумолчанию
И как позднее, так и раннее связывания работают нормально
- А Вы что курите?
— Минздрав предупреждает
Re[8]: проблема с COM
От: Rainbow  
Дата: 24.09.01 09:05
Оценка:
Здравствуйте Ростислав Глухов, вы писали:

R>>idl файл случайно не надо в vc делать для сервера?


РГ>Я обычно встраиваю tlb в dll

РГ>В ATL это поумолчанию
РГ>И как позднее, так и раннее связывания работают нормально

а как его создать/вставить в dll?
Re[9]: проблема с COM
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.09.01 09:11
Оценка:
Здравствуйте Rainbow, вы писали:

R>Здравствуйте Ростислав Глухов, вы писали:


РГ>>Я обычно встраиваю tlb в dll

РГ>>В ATL это поумолчанию
РГ>>И как позднее, так и раннее связывания работают нормально

R>а как его создать/вставить в dll?


У меня ATL Wizard сгенерил в .rc файле такие строки:

3 TEXTINCLUDE DISCARDABLE
BEGIN
"1 TYPELIB ""MySuper.tlb""\r\n"
"\0"
END
- А Вы что курите?
— Минздрав предупреждает
Re[10]: проблема с COM
От: Rainbow  
Дата: 24.09.01 09:28
Оценка:
Здравствуйте Ростислав Глухов, вы писали:

R>>а как его создать/вставить в dll?

РГ>У меня ATL Wizard сгенерил в .rc файле такие строки:
РГ>3 TEXTINCLUDE DISCARDABLE
РГ>BEGIN
РГ> "1 TYPELIB ""MySuper.tlb""\r\n"
РГ> "\0"
РГ>END

первоначально у меня вообще небыло ресурсов. их добавление и изменение по типу вышесказанного ничего не дало.
Re: проблема с COM
От: Сергеев Дмитрий Николаевич Россия  
Дата: 25.09.01 09:39
Оценка:
Здравствуйте Rainbow, вы писали:

R>Написал com сервер на vc. при написании клиента на vc проблем нет.

R>начал писать клиент на vb. делаю:
R>Dim obj As Object
R>Set obj = CreateObject("Com.Server.1")
R>и vb ругается "Object required". Что ему надо? Ведь он же его нашел.

Маловато информации...
Как там дела в реестре? Что за Com-объект? Какой у него интерфейс поумолчанию?
Д.Н.С.
Re[2]: проблема с COM
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.01 22:14
Оценка:
Здравствуйте Сергеев Дмитрий Николаевич, вы писали:

СДН>Маловато информации...

СДН>Как там дела в реестре? Что за Com-объект? Какой у него интерфейс поумолчанию?

Ага! Код в студию. ;o)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: проблема с COM
От: Rainbow  
Дата: 26.09.01 02:02
Оценка:
Здравствуйте 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));
};


//icomsrv.h

// {A888F560-58E4-11d0-A68A-0000837E3100}
DEFINE_GUID( CLSID_ComServer,
             0xa888f560, 0x58e4, 0x11d0, 0xa6, 0x8a, 0x0, 0x0, 0x83, 0x7e, 0x31, 0x0);
// {A888F561-58E4-11d0-A68A-0000837E3100}
DEFINE_GUID( IID_IComServer,
             0xa888f561, 0x58e4, 0x11d0, 0xa6, 0x8a, 0x0, 0x0, 0x83, 0x7e, 0x31, 0x0);
class IComServer : public IUnknown
{
public:
   STDMETHOD(Connection(void)) PURE;
   STDMETHOD(InitADO(void))    PURE;
   STDMETHOD(DeInitADO(void))   PURE;
   STDMETHOD(RunSQL(char*))   PURE;
   STDMETHOD(GetRows(int*))   PURE;
   STDMETHOD(GetColumns(int*))   PURE;
   STDMETHOD(GetVal(int,int,char*))   PURE;
   STDMETHOD(GetNameColumn(char*,int))   PURE;
};


server.reg
REGEDIT
HKEY_CLASSES_ROOT\Com.Server.1 = Com Server
HKEY_CLASSES_ROOT\Com.Server.1\CurVer = Com.Server.1
HKEY_CLASSES_ROOT\Com.Server.1\CLSID = {A888F560-58E4-11d0-A68A-0000837E3100}

HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100} = Com Server
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\ProgID = Com.Server.1
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\VersionIndependentProgID = ComServer.Component
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\InprocServer32 = c:\comsrv.dll
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\NotInsertable

вообще-то я уже это переписал с помощью ATL, но все равно интересно.
Re[4]: проблема с COM
От: VVV Россия  
Дата: 26.09.01 17:44
Оценка:
Здравствуйте Rainbow, вы писали:


R>вообще-то я уже это переписал с помощью ATL, но все равно интересно.


так надо ж от IDispatch сервер наследовать и реализовать его (и библиотеку типов), Бейсик то работает через Automation.
Re[5]: проблема с COM
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.01 18:11
Оценка:
Здравствуйте VVV, вы писали:

VVV>Здравствуйте Rainbow, вы писали:



R>>вообще-то я уже это переписал с помощью ATL, но все равно интересно.


VVV>так надо ж от IDispatch сервер наследовать и реализовать его (и библиотеку типов), Бейсик то работает через Automation.


Однако, VVV прав.

Но сказать хочется другое. Этот сервер — это проба пера? Или нужен для дела?

Если первое, то разбирайся дальше... Если второе, то кончай заниматься мазохизмом и сгенери проект ATL-ным визардом. Он (ATL-ный визард) и tlb создаст и Automation-совместимость обеспечит. Так что останется только реализовать логику.

PS

А изучать в ATL-е, тоже есть чего...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: проблема с COM
От: Rainbow  
Дата: 28.09.01 01:47
Оценка:
Здравствуйте VladD2, вы писали:

R>>>вообще-то я уже это переписал с помощью ATL, но все равно интересно.

VVV>>так надо ж от IDispatch сервер наследовать и реализовать его (и библиотеку типов), Бейсик то работает через Automation.
VD>Однако, VVV прав.
VD>Но сказать хочется другое. Этот сервер — это проба пера? Или нужен для дела?
VD>Если первое, то разбирайся дальше... Если второе, то кончай заниматься мазохизмом и сгенери проект ATL-ным визардом. Он (ATL-ный визард) и tlb создаст и Automation-совместимость обеспечит. Так что останется только реализовать логику.

надо для дела. но это и первый мой com. :)
Re[7]: проблема с COM
От: DNS Россия  
Дата: 02.10.01 12:34
Оценка:
Здравствуйте Rainbow, вы писали:

R>надо для дела. но это и первый мой com. :)


Раз надо для дела, так бросай MFC. Лабораторные на нём только писать :))
Д.Н.С.
Re[8]: проблема с COM
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.01 20:32
Оценка:
Здравствуйте DNS, вы писали:

DNS>Здравствуйте Rainbow, вы писали:


R>>надо для дела. но это и первый мой com. :)


DNS>Раз надо для дела, так бросай MFC. Лабораторные на нём только писать :))


Откуда ты взял, что он его на MFC написал? Ну, да ладно... все равно в целом ты прав преходить на ATL — ОДНОЗНААААЧНААА!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: проблема с COM
От: Rainbow  
Дата: 03.10.01 01:49
Оценка:
Здравствуйте DNS, вы писали:

R>>надо для дела. но это и первый мой com. :)

DNS>Раз надо для дела, так бросай MFC. Лабораторные на нём только писать :))

При чем тут MFC? он там нафиг не нужен.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.