关于LNK2001未解析外部符号_CLSID_D2D1HueRotation的技术求助
搞定LNK2001: 未解析的外部符号_CLSID_D2D1HueRotation这个坑
我一眼就看出你遇到的是Direct2D链接阶段的经典问题——链接器找不到CLSID_D2D1HueRotation的定义,这个标识符是Direct2D色调旋转效果的类ID,咱们一步步拆解原因和解决办法:
问题根源&修复方案
1. 没链接Direct2D效果专用库
CLSID_D2D1HueRotation这类效果的CLSID定义在d2d1effects.lib里,要是你项目没把这个库加进链接依赖,链接器肯定找不到它。
怎么修:
- 要么去项目属性里找「链接器→输入→附加依赖项」,把
d2d1effects.lib和d2d1.lib(Direct2D核心库,你大概率已经加了,但确认下)加进去; - 要么直接在代码开头插两行编译指令,省得去改设置:
#pragma comment(lib, "d2d1.lib") #pragma comment(lib, "d2d1effects.lib")
2. 漏了效果头文件
就算你能用ID2D1Effect,如果没包含色调旋转效果的头文件,编译器没法正确识别CLSID_D2D1HueRotation的声明,也会间接导致链接出错。
怎么修:
在代码最顶部加上:
#include <d2d1effects.h>
额外提醒:确认Direct2D版本够
HueRotation效果是Direct2D 1.1及以上才有的,要是你用的是老版本Windows SDK(比如Windows 7以前的),那肯定不行。确保你的项目用的是Windows 8及以上的SDK,默认就支持Direct2D 1.1+。
给你整理好的可运行代码片段
把上面的修复点加上后,你的代码应该是这样的:
#include <d2d1.h> #include <d2d1effects.h> #pragma comment(lib, "d2d1.lib") #pragma comment(lib, "d2d1effects.lib") // ... 你的其他代码(比如ComPtr的头文件之类的) ... float width = 350; float height = 100; Microsoft::WRL::ComPtr<ID2D1Effect> hueRotationEffect; context2->CreateEffect(CLSID_D2D1HueRotation, &hueRotationEffect); hueRotationEffect->SetInput(0, tetronimoBitmap.Get()); hueRotationEffect->SetValue(D2D1_HUEROTATION_PROP_ANGLE, 270.0f); rectImage = { width,height, width + tetronimoBitmap->GetSize().width, height + tetronimoBitmap->GetSize().height }; context2->DrawImage(hueRotationEffect.Get()); if (FAILED(context2->EndDraw())) { context2->EndDraw(); }
这样链接器就能找到CLSID_D2D1HueRotation的定义,错误应该就消失了。
内容的提问来源于stack exchange,提问作者H. Stepan
相关产品推荐
相关产品推荐

