调用CriWare API

关于调用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 头文件 */
#include "CriWareApi.h"
/* 添加FCriWare:: */
FCriWareApi::criAtomExPlayer_Start(player);
补充事项:
也可通过预处理器处理,自动省略“FCriWareApi::”。
可以在Include CriWareApiNativeStyleAlias.h以省略“FCriWareApi::”。
修改后的代码
#include "CriWareApiNativeStyleAlias.h"
/* 调用API仍使用原来的代码 */
criAtomExPlayer_Start(player);

如何获取句柄

可以用以下API获取AtomComponent和ManaComponent使用的AtomExPlayer句柄和Mana Player句柄。
AtomExPlayer句柄
  • UAtomComponent::GetAtomExPlayer
Mana Player句柄
  • UManaComponent::GetManaPlayer
用CriWareApi类的API操作用这些函数获取到的句柄,可以在AtomComponent和ManaComponent添加用户独有的设置。
Next:优化