下面的mwe基本上是从this example中提取的。完整的例子编译和工作正常,但我的房屋维修不用Visual Studio 2013编译,我不明白为什么不。错误C2664:无法将'IDWriteFactory2 **'转换为'IUnknown **'
#include <dwrite_2.h>
#include <atlbase.h>
using namespace std;
void main()
{
IDWriteFactory2* m_spdwriteFactory;
DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory2),
&(m_spdwriteFactory)
);
}
错误消息如下:
------构建开始:项目:测试,配置:调试64 ------
1 > Source.cpp
1> Source.cpp(16):error C2664:'HRESULT DWriteCreateFactory(DWRITE_FACTORY_TYPE,const IID &,IUnknown **):无法将参数3从'IDWriteFactory2 **'转换为'IUnknown **'
1>指向的类型是无关的;转换需要reinterpret_cast,C风格转换或功能风格转换
==========构建:0成功,1失败,0最新,0跳过====== ====
示例代码使用WRL :: ComPtr <>智能指针模板类。当您编写这样的代码时,强烈建议您这么做,它会处理大量枯燥且容易出错的管道代码,这些代码在您直接使用接口指针时必须写入。包括(void **)强制转换你必须用来说服编译器知道你在做什么。并且忘记调用Release(),从而在片段中创建的内存泄漏。 – 2014-09-24 15:18:20
如果你将你的评论写入答案,我会接受它,因为它说明了问题和解决方案。 – NOhs 2014-09-24 17:14:34