Linking issue
Hi all,
I am new to ATL/COM technology. I have 2 questions as below.
I have 2 subsystems who have different DLLS and lib. I want to use
services of one subsystems in the other.
a.h
---------
class ATL_NO_VTABLE Cabc :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<Cpsc, &CLSID_abc>,
public ISupportErrorInfo,
public IDispatchImpl<Iabc, &IID_Iabc, &LIBID_abcLib, -1, -1>/*,
public Iabc
{
public:
CIabc();
~CIabc();
DECLARE_REGISTRY_RESOURCEID(IDR_Iabc)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CIabc)
COM_INTERFACE_ENTRY(IIabc)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CIabc)
CONNECTION_POINT_ENTRY(IID_IPiabc)
END_CONNECTION_POINT_MAP()
DECLARE_NOT_AGGREGATABLE(CIabc)
// FinalConstruct, FinalRelease
// Note use of these requires that this object be created
// using CreateInstance (not operator new)
HRESULT FinalConstruct();
void FinalRelease();
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
public:
STDMETHOD(xyz)(BSTR name);
void NotifyPsc(int32_t id, Enum Status);
}
a.cpp
--------
Final Construct(),xyz(),NotifyPsc(int32_t,Enum Status) is
implemented.
In cpp file of the other subsystem2 I want to access the method xyz
and NotifyPsc. How do I do that?
I have included the header files of subsystem1 and included the
library in the linker settings. But In my C++ file when of subsystem-2
I did the following.
b.cpp
--------
xyz(BSTR name) {
HRESULT hr;
// Create a Cabc Object
CComObject<CIabc>* pObject = 0;
hr = CComObject<CIabc>::CreateInstance(&pObject);
SIL_ASSERT(SUCCEEDED(hr));
hr= pObject->QueryInterface(IID_x,&ptr);
ptr->xyz(name); (xyz is the function of subsystem1)
}
I got lot of linker errors as follows:
1>abc.obj : error LNK2019: unresolved external symbol "public: long
__thiscall abc::FinalConstruct(void)" (?FinalConstruct@abc@@QAEJXZ)
referenced in function __catch$?CreateInstance@?
$CComObject@Vabc@@@ATL@@SGJPAPAV12@@Z$0
1>abc.obj : error LNK2019: unresolved external symbol "public:
__thiscall abc::abc(void)" (??0abc@@QAE@XZ) referenced in function
"public: __thiscall ATL::CComObject<class abc>::CComObject<class abc>
(void *)" (??0?$CComObject@Vabc@@@ATL@@QAE@PAX@Z)
1>abc.obj : error LNK2001: unresolved external symbol "public: virtual
void __thiscall abc::NotifyPsc(long,enum Status)" (?
Notifyabc@abc@@UAEXJW4tagCalStatus@@@Z)
1>abc.obj : error LNK2019: unresolved external symbol "public: virtual
__thiscall abc::~abc(void)" (??1abc@@UAE@XZ) referenced in function
"public: virtual __thiscall ATL::CComObject<class
abc>::~CComObject<class abc>(void)" (??1?
$CComObject@Vabc@@@ATL@@UAE@XZ)
1>abc.obj : error LNK2019: unresolved external symbol "public: void
__thiscall abc::FinalRelease(void)" (?FinalRelease@abc@@QAEXXZ)
referenced in function "public: virtual __thiscall
ATL::CComObject<class abc>::~CComObject<class abc>(void)" (??1?
$CComObject@Vabc@@@ATL@@UAE@XZ)
1.Can any body tell me how can I use the methods of class Cabc of
subsystem1(notifyPsc(),xyz()) in subsystem-2?
2. How to fix these linking errors?
I will appreciate any help on the same?
Regards
Pradeep