[C语言控]用C语言调用DirectWrite
2014-04-18 00:28
1216 查看
微软没有提供DirectWrite的C语言兼容接口,非要用C来调用DirectWrite?只能是修改dwrite.h了。
参照d2d1.h,修改步骤如下:
所有的前置声明用typedef struct表示,如
在定义类之前先修改INTERFACE这个宏的定义,如
继承要如下修改
修改前
增加IUnknow这个COM接口的所有函数
所有的函数都要添加THIS作为第一个函数,如上所示,另,"THIS_"只是等于"THIS,"。
定义所有的GUID,必须和微软的dwrite.h的一模一样如
调用DirectWrite函数要用lpVtbl,而且要用正确的指针类型,如
C语言改变世界,噢耶
参照d2d1.h,修改步骤如下:
所有的前置声明用typedef struct表示,如
typedef struct IDWriteFontCollection FAR *LPIDWRITEFONTCOLLECTION;
在定义类之前先修改INTERFACE这个宏的定义,如
#undef INTERFACE #define INTERFACE IDWriteFactory即在定义IDWriteFactory前先定义INTERFACE
继承要如下修改
修改前
interface DWRITE_DECLARE_INTERFACE("b859ee5a-d838-4b5b-a2e8-1adc7d93db48") IDWriteFactory : public IUnknown修改后
DECLARE_INTERFACE_( IDWriteFactory, IUnknown )
增加IUnknow这个COM接口的所有函数
/*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
所有的函数都要添加THIS作为第一个函数,如上所示,另,"THIS_"只是等于"THIS,"。
定义所有的GUID,必须和微软的dwrite.h的一模一样如
DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48);另外头文件objbase.h,initguid.h是要包含进来的,字符串GUID转C语言定义这个最好用工具生成,我就写了一个直接输出到粘贴板的工具
unsigned r[11]; sscanf(str, "%8x-%4x-%4x-%2x%2x-%2x%2x%2x%2x%2x%2x", &r[0], &r[1], &r[2], &r[3], &r[4], &r[5], &r[6], &r[7], &r[8], &r[9], &r[10]);用sscanf搞定。C99的sscanf才支持%hhx,不要在MS的编译器里搞了,会出错的
调用DirectWrite函数要用lpVtbl,而且要用正确的指针类型,如
pDWriteFactory->lpVtbl->CreateTextFormat(app->pDWriteFactory,...
C语言改变世界,噢耶
相关文章推荐
- 四种读写文件的方式:系统调用(open/read/write),C语言(fopen,fgets, fputs),C++(ifstream, ofstream getline,)泛型算法
- android开发教程(十三)——JAVA基础之理解JNI原理(java调用C语言接口)
- 【Linux&Unix--open/close/write/read系统调用】
- c语言:调用函数打印How do you do!
- C语言中调用系统命令(system popen...)
- C语言调用python的demo
- 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写
- 系统调用:从write到vfs_write
- 深入理解C语言的函数调用过程 【转】
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 汇编语言调用Linux系统调用read和write
- C语言中函数调用与返回值的关系是什么
- Linux下的C语言编程——系统调用read和write函数实现文件拷贝
- 如何用c语言调用c++做成的动态链接库
- ARM汇编 C语言 C++ 相互调用 <此方法在armv8 测试成功 !>
- 使用directjngine、Ext Direct调用服务器端Java方法
- 关于C语言中一,二级指针函数中的使用和c语言中和函数发生调用时,实参和形参都会占用内存吗?
- C语言学习之 通过指向函数的指针 实现函数的调用
- 通用的单片机驱动lcd1602头文件,驱动液晶lcd1062的通用c语言头文件调用即可
- linux系统编程之文件与IO(二):系统调用read和write