1.正常流程编译skia.
2.skia.sln当中的core项目,改成DLL项目,再添加引用项目
3.更改include/core/skpreconfig.h,添加
#pragma warning(disable:4251)
#define SKIA_DLL
#define WIN32
#define SKIA_IMPLEMENTATION 1
第一行的防止出现EXPORT类引用非EXPORT出现的错误,
之后三行主要作用是将SKIA_API定义为__declspec(dllexport)这样就能够导出。
4.编译可以产生skia_core.dll,
5.使用该DLL
但是需要注意的是,如果要使用这个DLL,则不仅需要链接skia_core.lib(导出库),也需要更改skpreconfig.h当中的内容,因为
#define SKIA_IMPLEMENTATION 1 会导致SK_API为__declspec(dllexport),但是实际上我们需要的是__declspec(dllimport),因此
skpreconfig.h应该改为
#pragma warning(disable:4251)
#define SKIA_DLL
#define WIN32
#if !defined(SKIA_IMPLEMENTATION)
#define SKIA_IMPLEMENTATION 1
#endif
另外使用的时候需要在头文件当中添加
#define SKIA_IMPLEMENTATION 0
最后,preprocessor可以直接复制生成core项目的preprocessor。
6.例子(debug版本的)
#pragma once
#define SK_GAMMA_SRGB
#define SK_GAMMA_APPLY_TO_A8
#define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1
#define SK_SCALAR_IS_FLOAT
#define SK_CAN_USE_FLOAT
#define SK_SUPPORT_GPU 1
#define SK_BUILD_FOR_WIN32
#define SK_IGNORE_STDINT_DOT_H
#define _CRT_SECURE_NO_WARNINGS
#define GR_GL_FUNCTION_TYPE __stdcall
#define SK_DEBUG
#define GR_DEBUG 1
#define SK_DEVELOPER 1
#define SKIA_IMPLEMENTATION 0
#include <SkUtils.h>
#include <SkPaintFlagsDrawFilter.h>
#include <SkBlurMaskFilter.h>
#include <SkEmbossMaskFilter.h>
#include <SkPaint.h>
#include <SkStream.h>
#include <SkTypeface.h>
#include <SkDevice.h>
#include <SkImageDecoder.h>
#include <SkImageEncoder.h>
#include <SkCanvas.h>
#include <SkDashPathEffect.h>
//#include <platform_device.h>
//#include <platform_canvas.h>
//#include <bitmap_platform_device.h>
7.其他
另外git-hub上边也有skia_dll的项目,地址https://github.com/vosvos/skia-win32-dll,并且这个项目还把chrome的skia_ext项目给整合进去了,不过最大的问题是太老了,已经一年多没有更新了,实际skia日新月异,所以还是有点问题的,不过可以参考一下。