COM og IDispatch
Jeg sidder og arbejder lidt med COM/OLE...Og jeg kører så en lille test hvor min automation server har én funktion. Samtidig har jeg lavet et lille program hvor ved tryk på en knap skal der skabes forbindelse via en class-wrapper med COleDispatchDriver.
ProneLog.Document er blevet registeret i reg.
Og koden ser således ud.
Jeg undersøger først om der allerede er et aktivt doc objekt. Hvis ikke opret det da:
try
{
CLSID Clsid;
if( CLSIDFromProgID(OLESTR("ProneLog.Document"),&Clsid) != S_OK )
MessageBox("The CLSID was not found in registry!","Error COM",MB_ICONERROR|MB_OK);
LPUNKNOWN lpUnknown;
LPDISPATCH lpDispatch;
//ProneLog document er endnu ikke åbnet -Tildel dispatch til IProneLog.
if(GetActiveObject(Clsid, NULL, &lpUnknown) == S_OK)
{
HRESULT hr= lpUnknown->QueryInterface(IID_IDispatch, (LPVOID*)&lpDispatch);
lpUnknown->Release();
if(hr ==S_OK)
{
COM_ProneLog.AttachDispatch(lpDispatch, TRUE);
}
}
//if(COM_ProneLog.m_lpDispatch == NULL && !COM_ProneLog.CreateDispatch(Clsid, &OleExc))
// MessageBox("Unable to create ProneLog Dispatch driver!\n Is ProneLog automation-server registered?",
// "Error connecting...",MB_ICONERROR|MB_OK);
//ja ja den er sand hver gang :)
if( COM_ProneLog.m_lpDispatch == NULL)
MessageBox("Long Pointer to Dispatch interface dead!", "Exception caught within COM", MB_ICONERROR|MB_OK);
COM_ProneLog.CreateDispatch(Clsid, OleExc); //<-- Hér går det galt -den kan ikke finde mit interface... why?
}
Ser CreateDispatch retunerer != 0 hvis funktionen er lykkedes -jeg forstår bare IKKE hvorfor!