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#defineSK_GAMMA_SRGB#defineSK_GAMMA_APPLY_TO_A8#defineSK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1#defineSK_SCALAR_IS_FLOAT#defineSK_CAN_USE_FLOAT#defineSK_SUPPORT_GPU 1#defineSK_BUILD_FOR_WIN32#defineSK_IGNORE_STDINT_DOT_H#define_CRT_SECURE_NO_WARNINGS#defineGR_GL_FUNCTION_TYPE __stdcall#defineSK_DEBUG#defineGR_DEBUG 1#defineSK_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日新月異,所以還是有點問題的,不過可以參考一下。