一,环境:
Windows XP,Microsoft Visual Studio 2010
二,所需文件(clutter-1.4.2):
1, clutter动态连接库(libclutter.dll)和由此库生成的lib库;
2, clutter头文件;
3, 依赖库头文件及lib库(glib、cairo、pango、atk、GL等);
三,新建一Win32 Console Application工程
工程名:clutter_test
工程路径:E:\Vs2010project
四,配置project properties
将lib文件夹拷贝到工程路径下;
Projectàclutter_test Properties pageàConfiguration PropertiesàC/C++àGeneralà Additional Include Directories,在后面输入相关头文件的路径(E:\Vs2010project\lib\include; E:\Vs2010project\lib\include \cairo;……),使用分号间隔将所需头文件路径加入;(有时加载的不是DLL,而是Lib库时,可以直接在……àLinkeràInputàAdditional Dependencies里输入相关的Lib文件),如:E:\Vs2010project\lib\lib\glib-2.0.lib;E:\Vs2010project\lib\lib\atk-1.0.lib;E:\Vs2010project\lib\lib\cairo.lib;E:\Vs2010project\lib\lib\fontconfig.lib;E:\Vs2010project\lib\lib\freetype.lib;E:\Vs2010project\lib\lib\gio-2.0.lib;E:\Vs2010project\lib\lib\gmodule-2.0.lib;E:\Vs2010project\lib\lib\intl.lib;E:\Vs2010project\lib\lib\libpng.lib;E:\Vs2010project\lib\lib\pangocairo-1.0.lib;E:\Vs2010project\lib\lib\pangoft2-1.0.lib;E:\Vs2010project\lib\lib\pangowin32-1.0.lib;E:\Vs2010project\lib\lib\gthread-2.0.lib;E:\Vs2010project\lib\lib\gtk-win32-2.0.lib;E:\Vs2010project\lib\lib\gobject-2.0.lib;E:\Vs2010project\lib\lib\libclutter.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);
将dll库中的dll文件拷贝到windows\system32目录下,生成的执行文件才可执行,也可修改环境变量到dll库文件所在目录(我的电脑→属性→高级—>环境变量-àpath)。
五,代码(以下是直接在代码中动态加载dll文件,如有lib文件,省去)
1,在代码前加头文件#include <clutter.h>
2,加载动态连接库libclutter.dll:
HINSTANCE hDLL; //定义DLL文件句柄
hDLL=LoadLibrary(L"libclutter.dll"); //加载.dll,记得引号前要加L
3, 加载成功后,对于库里的函数需重新读取函数地址才能正常使用,例如使用
clutter_texture_new_from_file(),需进行如下操作方能使用:
typedef ClutterActor* (WINAPIV *CLUTTER_TEXTURE_NEW_FROM_FILE)(char*, char*);
CLUTTER_TEXTURE_NEW_FROM_FILE clutter_texture_new_from_file;
clutter_texture_new_from_file=(CLUTTER_TEXTURE_NEW_FROM_FILE)GetProcAddress(hDLLDrv, "clutter_texture_new_from_file");
actor_image=clutter_texture_new_from_file("Eris1.png", NULL);
对于数据类型和类,均可正常使用,如:
ClutterActor *actor_image;
ClutterStage *stage;
ClutterContainer *Container=(ClutterContainer *)stage;
如果出现类似clutter-test.obj : error LNK2001: unresolved external symbol的错误,可能就是由于没有重新定义导致的。