【发布时间】:2012-11-08 11:51:24
【问题描述】:
我在使用 Luabind 时遇到问题,如果没有一些过于简化的解决方案,我不确定如何解决。
Luabind 似乎只允许使用__cdecl 调用约定绑定到函数。在我当前的项目中,所有暴露给扩展/插件的功能都是使用__stdcall 暴露的。这使我无法直接绑定暴露的对象,而是必须为暴露的对象制作包装器。这很好,但有很多对象需要包装。
例如,一个对象可以如下所示:
struct IObject
{
void __stdcall SomeFunc1( void );
void __stdcall SomeFunc2( const char* );
};
struct IObjectContainer
{
IObject* __stdcall GetObject( int );
IObject* __stdcall GetObject( const char* );
};
struct IObjectCore
{
IObjectContainer* __stdcall GetObjectContainer();
};
我目前没有更改整个项目调用约定的选项,因此我正在查看是否有人有解决方案来修补 Luabind 以使用 __stdcall 函数。我在模板和增强功能方面不是最好的,所以我个人不确定从哪里开始尝试添加使用__stdcall 函数的能力。
作为参考,我正在使用:
- Lua 5.1.4
- Luabind 0.9.1
- VS2010
Lua 和 Luabind 都是其版本的最新版本。 (出于项目限制的原因,不使用 Lua 5.2,但如果有针对 5.2/Luabind 的 __stdcall 修复,我也很乐意接受。)
我只能找到一个非常旧版本的 Luabind 的修复程序来执行此操作,但网上流传的补丁仍然与当前的 Luabind 代码完全不符。
如果需要任何其他信息,请随时询问。
【问题讨论】:
-
您可以将这些对象包装到另一个调用约定并绑定它们
-
我知道,我已经在帖子中说明了这一点。我明确表示我会尽量避免这样做。
-
抱歉跳过了。不过,无论如何,您都必须在绑定上投入时间...
-
嗯..你看我的解决方案了吗?
-
我不再需要解决这个问题了,不过谢谢。
标签: lua calling-convention luabind