After all the hoops and jumps... here it is something that is working, using a MFC application:
edit: by adding this line Sleep(5000); was able to make it work.
#import "C:/Program Files/Common Files/Autodesk Shared/acax17enu.tlb" no_namespace
// launch AutoCAD 2009
void AutoCADLauncher::InvokeAutoCAD()
{
TRY
{
HRESULT hr = S_OK;
hr = CoInitialize(NULL);
CLSID clsid;
hr = ::CLSIDFromProgID(L"AutoCAD.Application.17.2", &clsid);
if (SUCCEEDED(hr))
{
IAcadApplication *pApp = NULL;
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, __uuidof(IAcadApplication), (void**) &pApp);
Sleep(5000); // required!
if (SUCCEEDED(hr))
{
pApp->Visible = VARIANT_TRUE;
pApp->PutWindowState(::acMax);
pApp->ActiveDocument->SendCommand(_bstr_t("_.CSREPORT ")); // call the command
pApp->Release();
}
}
CoUninitialize();
}
CATCH(COleDispatchException,e)
{
e->ReportError();
e->Delete();
}
END_CATCH;
}
#import "C:/Program Files/Common Files/Autodesk Shared/acax18enu.tlb" no_namespace
// launch AutoCAD 2010 or 2011
void AutoCADLauncher::InvokeAutoCAD()
{
TRY
{
HRESULT hr = S_OK;
hr = CoInitialize(NULL);
CLSID clsid;
// depending if both AutoCAD 2010 and 2011 are in the same machine
// it will be launched the most recently used from any of the two
hr = ::CLSIDFromProgID(L"AutoCAD.Application.18", &clsid);
if (SUCCEEDED(hr))
{
IAcadApplication *pApp = NULL;
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, __uuidof(IAcadApplication), (void**) &pApp);
Sleep(5000); // required!
if (SUCCEEDED(hr))
{
pApp->Visible = VARIANT_TRUE;
pApp->PutWindowState(::acMax);
pApp->ActiveDocument->SendCommand(_bstr_t("_.CSREPORT ")); // call the command
pApp->Release();
}
}
CoUninitialize();
}
CATCH(COleDispatchException,e)
{
e->ReportError();
e->Delete();
}
END_CATCH;
}
// for the initialization
AutoCADLauncher dlg;
m_pMainWnd = &dlg;
dlg.InvokeAutoCAD(); // launch AutoCAD
m_pMainWnd = NULL;