我正在尝试使用Visual C ++ 6.0为Win 98编写遗留程序,以便在Win XP计算机上的Visual C ++ 2008 Express上进行编译。该程序使用MFC。我已经安装了一个旧的Windows驱动程序开发工具包,并使用了MFC头文件和库。当我编译程序时,我收到一个链接器错误:
omiview.obj : error LNK2019: unresolved external symbol "public: int __thiscall CWnd::CreateControl(struct _GUID const &,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,class CFile *,int,wchar_t *)" (?CreateControl@CWnd@@QAEHABU_GUID@@PBDKABUtagRECT@@PAV1@IPAVCFile@@HPA_W@Z) referenced in function "public: virtual int __thiscall COmiView::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@COmiView@@UAEHPBD0KABUtagRECT@@PAVCWnd@@IPAUCCreateContext@@@Z)
omiview.h中的违规代码:
class COmiView : public CWnd
{
protected:
DECLARE_DYNCREATE(COmiView)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0xc1c9365d, 0xbdce, 0x11d1, { 0xa5, 0x5d, 0x0, 0x60, 0x8, 0x95, 0x71, 0xfc } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey); }
omiview对象是一个ActiveX控件,它显示来自第三方硬件驱动程序的数据。安装驱动程序软件,并在VS 2008的“工具/选择Toobox项目”对话框中的COM组件列表中显示ActiveX控件。
编译器正在读取afxwin.h头文件并正在编译CWnd :: CreateControl的声明。是否有一个库需要添加到项目中,以便链接器可以找到相应的对象代码?它是VS Express中缺少的一些组件吗?我是否需要一个未安装VS Express的Windows SDK?我是Visual C ++和Windows编程的新手,所以我对此有点不知所措。
BTW我也安装了Visual C ++ 2010 Express,但是我使用的是2008版本,因为2010年不会读取原来的VC6.0项目文件。该程序需要在Windows XP上运行,因为它依赖于无法在更现代的系统上运行的传统硬件和驱动程序。