在DLL文件中包含Windows.h
#include Windows.h inside of DLL file
我正在尝试使用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
无法链接到所需的库通常会产生"未解析的外部符号"错误。
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 在Windows上设置CMake和vcpkg时出错"无法打开包含文件"
- Qt自动生成的.rc文件无法打开包含文件'windows.h'
- Godbolt 在 MSVC 上包含 Windows.h 时无法链接?
- 在 Windows 上,stat 和 GetFileAttributes 对于包含奇怪字符的路径失败
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 无法在Windows中找到来自cmake的MySQL和Boost包含/库
- 我们如何在带有Visual Studio的Windows中包含BGI库?
- 如何在不包含 Windows.h 的情况下获取 IsDebuggerPresent 的声明
- 我可以在C 中的Windows中读取一个文件,而无需锁定包含文件的文件夹
- 如何检查包含 utf8 文本的 std::string 在 Windows 中是否以大写字母开头?
- 如何静态构建并在Windows上包含WolfSSL
- 如何读取目录中包含的所有文件 (WINDOWS)
- 在C++、Windows 7中包含OpenGL库
- 包含 Windows.h 和 wingdi.h 时出现"GradientFill was not declared in this scope"错误
- libclang:添加编译器系统包含路径(Windows中的Python)
- [cmake]如何使用cmake在windows上包含和链接系统库
- 如何设置 windows 文件打开对话框筛选器以包含"必须完成"选项