关于调用CriWare API
- 从应用程序的C/C++源调用Atom运行库或Mana运行库的API时,必须注意以下几点。
通过DLL分离内存空间
- 虚幻引擎4 PC版采取每个模块创建DLL的结构。
- 创建植入CRIWARE UE4插件的编辑器和应用程序时, CriWareRuntime.dll将被创建。
CriWareRuntime.dll在加载时自动初始化Atom运行库和Mana运行库。
( /Engine/Source/ThirdParty/CriWare 下的库将静态链接CriWareRuntime.dll。)
- 此外,在用户自己创建的模块链接/Engine/Source/ThirdParty/CriWare下的库创建dll时,Atom运行库和Mana库将映射到与CriWareRuntime.dll不同的内存空间。
虽然PC环境下CriWareRuntime.dll与应用程序DLL可以分别运行,但在为游戏机构建及整体构建(输出为1个exe)时,原本按照DLL分离的内存空间将变成一个,导致无法正常运行。
关于CriWareApi类
- 为解决以上问题,CRIWARE UE4插件提供特殊的入口点“ CriWareApi类 ”,用于调用在CriWareRuntime.dll内完成初始化的Library的API。
可以通过CriWareApi类操作Atom/Mana运行库,共享CRIWARE UE4插件与应用程序配置在同一内存空间的Library。
如何使用CriWareApi类
- 包含CriWareApi.h,调用Atom/Mana API时,添加“FCriWareApi::”,将调用CriWareRuntime模拟中的Atom/Mana API。
正常在调用Atom运行库的API的代码与使用CriWareApi时的代码比较如下。
- 原来的代码
#include <cri_atom_ex.h>
:
criAtomExPlayer_Start(player);
:
- 使用CriWareApi时的代码
#include "CriWareApi.h"
:
FCriWareApi::criAtomExPlayer_Start(player);
:
- 补充事项:
- 也可通过预处理器处理,自动省略“FCriWareApi::”。
可以在Include CriWareApiNativeStyleAlias.h以省略“FCriWareApi::”。
- 修改后的代码
#include "CriWareApiNativeStyleAlias.h"
:
criAtomExPlayer_Start(player);
:
如何获取句柄
- 可以用以下API获取AtomComponent和ManaComponent使用的AtomExPlayer句柄和Mana Player句柄。
- AtomExPlayer句柄
- UAtomComponent::GetAtomExPlayer
- Mana Player句柄
- UManaComponent::GetManaPlayer
- 用CriWareApi类的API操作用这些函数获取到的句柄,可以在AtomComponent和ManaComponent添加用户独有的设置。