1

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機能をどこから追加しようとしているのかさえ個人的にはわかりません.

参考までに、私は以下を使用しています:

  • ルア 5.1.4
  • ルバインド 0.9.1
  • VS2010

Lua と Luabind は両方とも、rev の最新バージョンのストックです。(プロジェクトの制限により Lua 5.2 は使用しませんが、5.2/Luabind の修正があれば__stdcall喜んでそれを受け入れます。)

これを行うための非常に古いバージョンの Luabind の修正しか見つけることができませんでしたが、ネット上にまだ浮かんでいるパッチは、現在の Luabind コードとはまったく一致していません。

他に必要な情報があれば、お気軽にお尋ねください。

4

2 に答える 2

2

悲しいことに、非アクティブであり、さらに検索してもそれ以上の回答がないため、プロジェクト開発者と話し、プロジェクト全体から __stdcall を削除しました。そのため、バインディングはすべて __cdecl を介して正常に機能するようになりました。望んでいたルートではありませんが、現在は計画通りに進んでいます。

于 2012-11-22T18:39:50.237 に答える