【问题标题】:How do I set up the libraries correctly for Windows' GDI in C++?如何在 C++ 中为 Windows 的 GDI 正确设置库?
【发布时间】:2020-02-07 02:10:04
【问题描述】:

我想制作一个 C++ 程序,它可以实时访问屏幕上的像素(颜色和强度,例如位图)。我认为应该可行的方法之一是使用 Windows 的 GDI 函数,例如 CreateCompatibleDC

问题是当我尝试运行它时,我收到错误消息: " C:\Users\Myname\AppData\Local\Temp\cce0hZ9w.o Screencapture_example.cpp:(.text+0x30): undefined reference to `__imp_CreateCompatibleDC' "

所以看起来包含该函数的库不存在或不包括在内。但是我确实包含了 windows.h 和wingdi.h,并且根据上面给出的链接中的页面,该函数是wingdi.h 的一部分。

它还说它需要库 Gdi32.lib,我在计算机上的任何地方都找不到它。但是有一个名为 libgdi32.a 的文件,它位于文件夹 C:\Programfiles\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib 中。我下载了 gdi32.lib 并将其添加到同一个文件夹中。重新编译时错误信息不变。

该文件夹包含在使用 gcc 编译器的 Dev-C++ 编辑器的库部分中。我的操作系统是 Windows 10。

#include<windows.h>
#include<wingdi.h>
int main(int argc,char *argv[]){

HDC hdc = GetDC(NULL); // get the desktop device context
HDC hDest = CreateCompatibleDC(hdc); // create a device context to use yourself

//More to come here but I don't want to complicate it too much before
//I get it to work this far.

return 0;
}

【问题讨论】:

  • 您正在尝试使用 mingw 和 gcc 创建程序,然后按照 Visual Studio 和 Windows SDK 应遵循的说明进行操作...
  • @yms 那么问题是它不适用于 gcc 编译器吗?我必须使用 Visual Studio 才能使其工作吗?
  • 正如您所确定的,您应该使用库 libgdi32.a。使用 Gdi32.lib 的文档适用于 MSVC 工具链。当您使用 MinGW64 工具链(使用 gcc)时,您需要相应地调整库名称。当刚开始在平台上进行开发时,通常更容易使用本机工具链,因为所有支持文档都符合您的需求。
  • @Richard 链接到文件所在的文件夹就足够了,还是我需要直接链接到文件?关于工具链:到目前为止,我在 C++ 中所做的一切都与 gcc 编译器配合得很好,所以我不知道除了编辑器的外观之外还有其他差异。
  • 你需要直接链接文件。基本上 MinGW64 是 gcc 到 MS-Windows 环境的一个端口,具有 MS 的 WinAPI 支持库的逆向工程。 gcc 因为它的 Linux 背景要求库采用不同的格式,具有不同的命名约定。

标签: c++ windows gcc libraries


【解决方案1】:

头文件仅提供声明,对于 CreateCompatibleDC,您需要提供 gdi32.lib 作为链接的一部分(这是 Microsoft 文档页面上要求块的“库”部分)。

【讨论】:

  • 我下载了 gdi32.lib 并将其添加到文件夹 C:\Programfiles\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib 中。重新编译时错误信息没有改变。
猜你喜欢
  • 1970-01-01
  • 2021-02-04
  • 2020-06-24
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多