我正在尝试使用ChooseColor在C ++中创建一个颜色对话框DLL。虽然我每次建立时都会遇到问题
1>ChooseColorDLL.obj : error LNK2019: unresolved external symbol __imp_ChooseColorA referenced in function "void __cdecl ShowMyDialog(char *)" (?ShowMyDialog@@YAXPEAD@Z)
这是我的DLL中的.cpp文件:
#include "stdafx.h"
#include "ChooseColorDLL.h"
#include <commdlg.h>
#include <fstream>
#include <iostream>
CHOOSECOLORDLL_API void ShowDialog(char* i)
{
static COLORREF colorrefCustomColours[16] = {0} ;
CHOOSECOLOR cc;
cc.hwndOwner = NULL; //No Owner
cc.hInstance = NULL;
cc.rgbResult = RGB(0,0,0);
cc.lpfnHook =NULL;
cc.Flags = CC_SOLIDCOLOR | CC_PREVENTFULLOPEN;
cc.lpCustColors = colorrefCustomColours;
cc.lpTemplateName = NULL;
cc.lCustData = NULL;
cc.lStructSize = sizeof(cc);
// Seperate Colors
ChooseColor(&cc);
}
ChooseColorDLL.h:
#ifdef CHOOSECOLORDLL_EXPORTS
#define CHOOSECOLORDLL_API __declspec(dllexport)
#else
#define CHOOSECOLORDLL_API __declspec(dllimport)
#endif
CHOOSECOLORDLL_API void ShowDialog(char* i);
答案 0 :(得分:3)
我有理由相信问题是你的版本没有设置WINVER和_WIN32_WINNT版本未设置或未正确设置 - 请参阅this
换句话说,在#include <windows.h>
之前,您应该:
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
默认情况下,以便应用程序在“任何”版本的Windows上运行,windows.h仅为您提供从WinNT4及以后版本的Windows版本中可用的功能。由于这是在Win2K中引入的,因此它不是默认值。上面的定义为您提供了Win2K变体。其他值记录在案here
答案 1 :(得分:1)
在MSDN中查找ChooseColor。在该页面的“要求”部分中,它表示您必须链接到ComDlg32.lib。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646912(v=vs.85).aspx
无法链接到所需的lib通常会产生“未解析的外部符号”错误。