c++用idl文件的com组件开发

我用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文件中的隐藏函数的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值