2016-06-23 4 views
0

안녕하세요.Chrome과 IE를 사용하는 firebreath 2.0 플러그인 방식의 convert_cast 동작이 다른 이유는 무엇입니까

std::string B::mymethod(std::string tStr) 
{ 
    return tStr; 
} 

표준 : : 문자열 "테스트"str을 될 것으로 예상된다,하지만 난 후 : myclassObj에서

void A::get_string(const FB::JSObjectPtr& myclassObj) 
{ 
    FB::variantPromise a = myclassObj->Invoke("mymethod", FB::VariantList{ "test" }); 
    a.then<void>([this](FB::variant ret) { 
     std::string Str = ret.convert_cast<std::string>(); 
     return; 
    }); 
} 

MyMethod라는이 :

나는 나의 firebreath 2.0 플러그인을 다음 방법이 브라우저에서 get_string을 호출하면 동작 차이가 있습니다. Chrome을 사용할 때 문자열이 반환되고 변환이 정상입니다. IE에서 사용할 때 shared_ptr을 얻었고 문자열을 가져올 수 없습니다. 이 경우 변환에서 예외가 발생합니다. 제가 잘못하고있는 무슨 :)

추신을 결정하는 데 도움이

하시기 바랍니다, 그것은 중요하지 않습니다, 나는 무엇을 얻으려고하는지 : 크롬 변환에서 std :: string, long, 또는 다른 것들은 괜찮습니다.하지만 IE에서는 ret에서만 얻을 수 있습니다.

사실, get_string 메서드에서 myclassObj에 대한 포인터를 얻고 싶습니다. 그러나 프록시 클래스 때문에 막혔습니다. 그래서, std :: string을 사용하여 포인터를 얻으려고합니다.

답변

0

실제로 일어나는 일을 디버깅해야합니다. FireBreath 2의 IE 인터페이스에 버그가있을 가능성이 있습니다. 광범위하게 테스트 한 적이 없다고 생각하기 때문입니다. 그렇다면 오픈 소스의 장점입니다.

브라우저에서 객체를 다시 전달하는 대신 전달할 식별자를 사용하고지도 또는 플러그인 측에서 객체를 조회하는 것이 좋습니다. 그렇게하면 브라우저의 프록시를 통과하는 데 필요한 모든 오버 헤드가 없습니다.