我用vc6 classwizard,添加类,添加应用程序,编译生成.h和.cpp,然后拷贝到vs2005工程目录下,
//Initialize COM library...
if (FAILED(CoInitialize(NULL)))
return;
CLSID clsid;
CLSIDFromProgID(L"ViewDraw.Application", &clsid);
// Get an interface to the running instance, if any..
IUnknown *pUnk;
IDispatch *pDisp = NULL;
HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
if(SUCCEEDED(hr))
hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
else
return;
if (!pDisp)
return;
COleDispatchDriver pOleDis(pDisp, FALSE);
pOleDis.AttachDispatch(pDisp);
IVdApp *pApp = (IVdApp *)(&pOleDis);
// test
CString sname = pApp->GetStatusBarText();
CString ss = pApp->GetCommandLineArguments();
CString sV = pApp->GetVersion();
BOOL bVis = pApp->GetVisible();
//
IVdDoc dxDoc = pApp->GetActiveDocument();
CString na = dxDoc.GetName();
//
IVdView dxView = pApp->GetActiveView();
IVdBlock dxBlock = dxView.GetBlock();
// long lSym = dxBlock.GetSymbolType();
long lSize = dxBlock.GetSheetSize();
/
CComDispatchDriver dispDr = dxBlock.DetachDispatch();
// CComPtr<IUnknown> spUnk;spUnk.CoCreateInstance(L"ViewDraw.Application");
// CComDispatchDriver dispDr(spUnk);
if (dispDr == NULL) return;
LPCOLESTR symbolName = L"ad7228a.1";
double x(0),y(0);
CComVariant varParams[3] = {CComVariant(symbolName), CComVariant(x), CComVariant(y)},
varRet;
dispDr.InvokeN(L"AddComponentMoveMode", varParams, _countof(varParams), &varRet);
dxBlock.AttachDispatch(dispDr.Detach());
///
IVdText dxText = dxBlock.AddText(_T("xxxxxxxxxxxxxxxx"), 1347, 210);
dxText.SetFont(0);
dxText.SetSize(30);
dxText.SetOrigin(5);
//dxBlock.DeSelectAll();
// 删除标注的
/*
IVdObjs dxObjs = dxView.Query(4, 0);
int nCount = dxObjs.GetCount();
for (int j = 1;j < nCount + 1; j++)
{
IVdText dxTex = dxObjs.Item(j);
CString sText = dxTex.GetTextString();
IVdPoint dxLoc = dxTex.GetLocation();
long nX = dxLoc.GetX();
long nY = dxLoc.GetY();
//删除文字
dxTex.SetSelected(TRUE);
dxBlock.DeleteSelected(TRUE);
}
*/
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
//释放com
::CoUninitialize();
注:红色部分是调用idl文件中的隐藏函数的。