#include Windows.h里面的DLL文件

时间:2013-06-05 21:59:11

标签: c++ windows winapi

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

2 个答案:

答案 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通常会产生“未解析的外部符号”错误。