2

少し問題があり、解決方法がわかりません(悲しいことに)。

Awesomium 1.7RC2 SDK のサンプル プロジェクトをコンパイルしたいのですが、vs10 では正常に動作しますが、vs11 ではエラーが発生します。

エラーは次のとおりです。

http://pastebin.com/6RdUffve

これらは、次のコード行によって発生します。

method_dispatcher_.Bind(app_object,
WSLit("SayHello"),
&Application::OnSayHello);
method_dispatcher_.Bind(app_object,
WSLit("Exit"),
&Application::OnExit);

method_dispatcher_.BindWithRetval(app_object,
WSLit("GetSecretMessage"),
&Application::OnGetSecretMessage);

ディスパッチャ クラスのコード:

ヘッダー: http://pastebin.com/ktTEuQ4T

ソース: http://pastebin.com/FTDHQzJ9

誰かが私を助けてくれることを願っています:)

4

1 に答える 1

1

これは、std::function がメンバー関数ポインターを関数ポインターに暗黙的に変換しない VS2012 のバグが原因のようです。この例は、Bjarne Stroustroups C++11 FAQ に従って動作するはずですが、VS2012 で同じエラーをスローします。

struct X {
    int foo(int);
};

function<int (X*, int)> f;
f = &X::foo;        // pointer to member

X x;
int v = f(&x, 5);   // call X::foo() for x with 5

次のような静的関数を作成することで、これを回避できます。

void StaticOnSayHello(Application* app, Awesomium::WebView* caller, const Awesomium::JSArray &args) {
    app->OnSayHello(caller, args);
}

などを、method_dispatcher::Bind の 3 番目の引数として指定します。

于 2012-09-11T16:20:11.810 に答える