• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱
欢迎来到 behaviac Q&A。 您在bbs里的问题,管理员会当下就收到通知,不要担心管理员看不到您的问题。也请在bbs里提供您的email,这样就可以第一时间收到关于回答,评论的email的通知了。 为了节省大家的时间,请表达好你的问题,提供必要上下文,版本号,平台信息,重现步骤等。

游戏逻辑封装成dll,里面用了行为树的枚举定义注册函数,编译不通过,需要这么处理?

0 喜欢 0 不喜欢
198 浏览
如果我要把我的游戏逻辑封装成dll,然后我的游戏逻辑里用了行为树的枚举定义,这个时候里面才注册函数我要怎么处理?目前我的情况是编译无法通过。
最新提问 6月 2, 2016 用户: think_jumper (120 分)

1个回答

0 喜欢 0 不喜欢
是C++吗?具体错误是什么?
最新回答 6月 2, 2016 用户: jonygli (58,290 分)
是的,C++
error LNK2019: 无法解析的外部符号 "struct EnumClassDescriptionBSS_t & __cdecl EM_GAME_STATEGetEnumClassValueNames(void)" (?EM_GAME_STATEGetEnumClassValueNames@@YAAAUEnumClassDescriptionBSS_t@@XZ),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_GAME_STATE>(enum EM_GAME_STATE *)" (??$GetEnumClassValueNames@W4EM_GAME_STATE@@@@YAABVEnumClassDescription_t@@PAW4EM_GAME_STATE@@@Z) 中被引用
4>main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl RegisterEnumClass(enum EM_GAME_STATE *)" (?RegisterEnumClass@@YAXPAW4EM_GAME_STATE@@@Z),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_GAME_STATE>(enum EM_GAME_STATE *)" (??$GetEnumClassValueNames@W4EM_GAME_STATE@@@@YAABVEnumClassDescription_t@@PAW4EM_GAME_STATE@@@Z) 中被引用
4>main.obj : error LNK2019: 无法解析的外部符号 "struct EnumClassDescriptionBSS_t & __cdecl EM_ROLE_STATEGetEnumClassValueNames(void)" (?EM_ROLE_STATEGetEnumClassValueNames@@YAAAUEnumClassDescriptionBSS_t@@XZ),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_ROLE_STATE>(enum EM_ROLE_STATE *)" (??$GetEnumClassValueNames@W4EM_ROLE_STATE@@@@YAABVEnumClassDescription_t@@PAW4EM_ROLE_STATE@@@Z) 中被引用
4>main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl RegisterEnumClass(enum EM_ROLE_STATE *)" (?RegisterEnumClass@@YAXPAW4EM_ROLE_STATE@@@Z),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_ROLE_STATE>(enum EM_ROLE_STATE *)" (??$GetEnumClassValueNames@W4EM_ROLE_STATE@@@@YAABVEnumClassDescription_t@@PAW4EM_ROLE_STATE@@@Z) 中被引用
4>main.obj : error LNK2019: 无法解析的外部符号 "struct EnumClassDescriptionBSS_t & __cdecl EM_MONSTER_TYPEGetEnumClassValueNames(void)" (?EM_MONSTER_TYPEGetEnumClassValueNames@@YAAAUEnumClassDescriptionBSS_t@@XZ),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_MONSTER_TYPE>(enum EM_MONSTER_TYPE *)" (??$GetEnumClassValueNames@W4EM_MONSTER_TYPE@@@@YAABVEnumClassDescription_t@@PAW4EM_MONSTER_TYPE@@@Z) 中被引用
4>main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl RegisterEnumClass(enum EM_MONSTER_TYPE *)" (?RegisterEnumClass@@YAXPAW4EM_MONSTER_TYPE@@@Z),该符号在函数 "class EnumClassDescription_t const & __cdecl GetEnumClassValueNames<enum EM_MONSTER_TYPE>(enum EM_MONSTER_TYPE *)" (??$GetEnumClassValueNames@W4EM_MONSTER_TYPE@@@@YAABVEnumClassDescription_t@@PAW4EM_MONSTER_TYPE@@@Z) 中被引用

你需要下面类似的语句:

image

可以在提供的例子中搜索相应例子。

另也可以参考:http://www.behaviac.com/language/zh/tutorial7_customenum/

DECLARE_BEHAVIAC_ENUM我定义了的。

但是DECLARE_BEHAVIAC_ENUM里面有注册定义函数的部分,我整个游戏逻辑工程本身是想连着AI模块一起封装成dll的,window上C++封装成dll,需要对函数进行封装声明__declspec(dllexport)字样,但是DECLARE_BEHAVIAC_ENUM是定义在宏里面的。我无法把声明的字样放到里面的函数。导致链接不通过。请问这种情况要如何解决?
首先要保证你在某个cpp里添加了BEGIN_ENUM_DESCRIPTION这个宏。
我建议你们不要用宏封装得太厉害,冗余点无所谓,但是能保留一定修改空间给用户。

请问我说的这个问题需要怎么解决呢?
这个我弄了,然后呢?

image

对了,你的项目里是不是定义了BEHAVIACDLL_EXPORTS?

如下图,在libbehaviac里需要定义BEHAVIACDLL_EXPORTS和BEHAVIAC_DLL,但在game里不能定义。

image

image

 

这些我都有弄~~~。

后面我解决了,把代码设置成基本数据类型传递参数的函数定义,使用时由外部传入,按各自项目封装,严格区分开来,就没事了。
...