在DLL文件中包含Windows.h

#include Windows.h inside of DLL file

本文关键字:Windows 包含 DLL 文件      更新时间:2023-10-16

我正在尝试使用ChooseColor在c++中创建一个颜色对话框DLL。尽管每次构建时都会出现

问题
1>ChooseColorDLL.obj : error LNK2019: unresolved external symbol __imp_ChooseColorA referenced in function "void __cdecl ShowMyDialog(char *)" (?ShowMyDialog@@YAXPEAD@Z)

这是我的。cpp文件在我的DLL:

#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);

我有理由相信问题是你的构建没有设置WINVER和_WIN32_WINNT版本要么没有设置,要么没有正确设置-见此

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

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

默认情况下,为了使应用程序在"任何"版本的Windows上工作,Windows .h只提供在WinNT4及以后的每个版本的Windows上可用的功能。因为这是在Win2K中引入的,所以它不是默认的。上面的定义为您提供了Win2K变体。其他值在这里记录

在MSDN中查找ChooseColor。在该页的"需求"部分,它说你必须链接到ComDlg32.lib。

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

无法链接到所需的库通常会产生"未解析的外部符号"错误。