Помогите плиз со следущим:
В MFC-проект вставляется ATL-объект, затем сращивается объект приложения c ATL-объеком:
class CG2TillEmulApp : public CWinApp,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CG2TillEmulApp, &CLSID_DComSrv>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CG2TillEmulApp>,
public IDispatchImpl<IDComSrv, &IID_IDComSrv, &LIBID_G2TillEmulLib>,
public CProxy_IDComSrvEvents< CG2TillEmulApp >
{
public:
bool FillCommRemoteList(CArray<int, int> &list);
CG2TillEmulApp();
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
STDMETHOD(RunSendData)(LONG CommId, LONG CamNum, BSTR Data, LONG Image, LONG Type, BSTR Operator_Name, BSTR KKM_Num);
Затем добавляем метод SendData и мплиментируем ConnectionPoint.
В большинстве примеров и статей, возбуждение события Fire_SendData происходит в клиенте:
Dim WithEvents obj As G2TillEmulLib.DComSrv
Private Sub Form_Load()
Set obj = New DComSrv
//Здесь происходит вызов события Fire_SendData
obj.RunSendData
End Sub
Private Sub obj_SendData(ByVal CommId As Long, ByVal CamNum As Long, ByVal Data As String, ByVal Image As Long, ByVal Type As Long, ByVal Operator_Name As String, ByVal KKM_Num As String)
MsgBox "I has get data from server"
End Sub
Необходимо вызвать это событие в сервере. Я делаю это так:
CComObject<CG2TillEmulApp> *ob;
CComObject<CG2TillEmulApp>::CreateInstance(&ob); ob->Fire_SendData(0,m_CamNum,(BSTR)strData.AllocSysString(), iImage,OperationType,(BSTR)OperatorName.AllocSysString (), (BSTR)TillNum.AllocSysString());
}
При таком вызове не происходит соединения с клиентом и обработчик в VB клиенте не срабатывает
_K>При таком вызове не происходит соединения с клиентом и обработчик в VB клиенте не срабатывает
Это обычное локальное создание объекта, причем осуществляемое без фабрики класса. А отсюда и не использование синглетонности, которую в АТЛ делает именно фабрика. А отсюда и отсутствие каких бы то ни было клиентов, которых можно было бы оповестить. Т.е. объект-то оповещает, но никого нет.
Здравствуйте, Vi2, Вы писали:
Vi2>[/ccode]_K>При таком вызове не происходит соединения с клиентом и обработчик в VB клиенте не срабатывает[/q] Vi2>Это обычное локальное создание объекта, причем осуществляемое без фабрики класса. А отсюда и не использование синглетонности, которую в АТЛ делает именно фабрика. А отсюда и отсутствие каких бы то ни было клиентов, которых можно было бы оповестить. Т.е. объект-то оповещает, но никого нет.
Делала я объкт и глобальным, ситуация от этого не изменилась