2014-09-24 64 views
1

下面的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跳过====== ====

+0

示例代码使用WRL :: ComPtr <>智能指针模板类。当您编写这样的代码时,强烈建议您这么做,它会处理大量枯燥且容易出错的管道代码,这些代码在您直接使用接口指针时必须写入。包括(void **)强制转换你必须用来说服编译器知道你在做什么。并且忘记调用Release(),从而在片段中创建的内存泄漏。 – 2014-09-24 15:18:20

+0

如果你将你的评论写入答案,我会接受它,因为它说明了问题和解决方案。 – NOhs 2014-09-24 17:14:34

回答