作者:朱金灿
来源: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插件