自己动手编写一个VS插件(七)

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

        继续开发VS插件。今天在添加ATL控件时出现一个“未能返回新代码元素”的错误,如下图:

       

 

       解决办法是删除删掉ncb文件即可。

      成功添加一个ATL控件后,编译工程后出现一些链接错误:

1>Connect.obj : errorLNK2001: 无法解析的外部符号_IID_IStatDlg

1>StatDlg.obj : errorLNK2001: 无法解析的外部符号_IID_IStatDlg

1>Connect.obj : errorLNK2001: 无法解析的外部符号_LIBID_DevAssistLib

1>StatDlg.obj : errorLNK2001: 无法解析的外部符号_LIBID_DevAssistLib

1>Connect.obj : errorLNK2001: 无法解析的外部符号_CLSID_StatDlg

1>StatDlg.obj : errorLNK2001: 无法解析的外部符号_CLSID_StatDlg


      解决办法是把生成的AddIn_i.c加到工程里。

      实际上我们看到VS插件开发中很多时候是围绕EnvDTE80::DTE2这个对象来转的,但是如何获取EnvDTE80::DTE2,网上有一篇文章:VSPackge插件系列:如何正确获取DTE。粗看了一下,感觉颇为复杂。其实有更好的办法是把它作为一个全局变量来进行。具体如下:

CComPtr<EnvDTE80::DTE2> g_pDTE;
STDMETHODIMP CConnect::OnConnection(IDispatch *pApplication, ext_ConnectMode ConnectMode, IDispatch *pAddInInst, SAFEARRAY ** /*自定义*/ )
{
	HRESULT hr = S_OK;
	pApplication->QueryInterface(__uuidof(DTE2), (LPVOID*)&m_pDTE);
	pAddInInst->QueryInterface(__uuidof(EnvDTE::AddIn), (LPVOID*)&m_pAddInInstance);

	if(NULL!=m_pDTE)
		g_pDTE = m_pDTE;
   …….
}



参考文献:


1. 编写VS2008插件



posted on 2013-10-08 19:28  岚之山  阅读(202)  评论(0编辑  收藏  举报

导航