2

我正在尝试使用 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);
}

选择ColorDLL.h:

#ifdef CHOOSECOLORDLL_EXPORTS
#define CHOOSECOLORDLL_API __declspec(dllexport)
#else
#define CHOOSECOLORDLL_API __declspec(dllimport)
#endif

CHOOSECOLORDLL_API void ShowDialog(char* i);
4

2 回答 2

3

我有理由确定问题是您的构建没有设置 WINVER 和 _WIN32_WINNT 版本要么未设置,要么设置不正确 - 请参阅

换句话说,在 之前#include <windows.h>,你应该有:

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

默认情况下,为了让应用程序在“任何”版本的 Windows 上运行,windows.h 只为您提供从 WinNT4 及更高版本的每个版本的 Windows 中可用的功能。由于这是在 Win2K 中引入的,因此它不是默认设置。上面的定义为您提供了 Win2K 变体。此处记录了其他值

于 2013-06-05T22:50:02.743 回答
1

在 MSDN 中查找 ChooseColor。在该页面的“要求”部分中,它说您必须链接到 ComDlg32.lib。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646912(v=vs.85).aspx

未能链接到所需的库通常会产生“未解析的外部符号”错误。

于 2013-06-06T03:29:04.853 回答