2013-03-26 2 views
0

안녕하십니까.
FireBreath 플러그인을 작성하고 있습니다. 작은 문제는 내 가난한 C++ 지식으로 인해 발생했습니다. 아래 코드를 참조하십시오. HWND 을 반환 기능 FB::PluginWindowWin::getBrowserHWND()GetWindowRect(hWnd, &rect) 기능에 HWND로 일하고 싶어하지 않는 이유회원에 정적 링크가 없습니다. 오류 C2352

나는 이해할 수 없다.

컴파일러는 FB::PluginWindowWin::getBrowserHWND()에서 FB을 강조하고 "회원에 비 정적 링크가 아니라 설정 개체를 지정해야합니다"라고 나에게 이야기한다 (이 메시지는 러시아어에, 내 번역 한 것입니다,하지만 난 여전히 같은 의미를 가지고 생각)

이 오류가있어 :

Error C2352 FB::PluginWindowWin::getBrowserHWND:illegal call of non-static member function 

코드 :

TestPlugin.cpp 
#include "Win/PluginWindowWin.h" 
#include "JSObject.h" 
#include "variant_list.h" 
#include "DOM/Document.h" 
#include "global/config.h" 
#include <Windows.h> 
#include "TestPluginAPI.h" 

///////My Functions//////// 

FB::variant PosTest() 
{ 
RECT rect; 
HWND hWnd; 
hWnd = FB::PluginWindowWin::getBrowserHWND(); 
if(GetWindowRect(hWnd, &rect)) 
    { 

    int width = rect.right - rect.left; 
    int height = rect.bottom - rect.top; 
    int left = rect.left; 
     return left; 
    } 
} 


TestPlugin.h 
#include "Win/PluginWindowWin.h" 
#include <string> 
#include <sstream> 
#include <boost/weak_ptr.hpp> 
#include "JSAPIAuto.h" 
#include "BrowserHost.h" 
#include "TestPlugin.h" 
#include <Windows.h> 

/////Declarations///// 

//Rect 
BOOL WINAPI GetWindowRect(HWND hWnd, LPRECT lpRect); 

//Pos Test 
FB::variant PosTest(); 

답변

4

그 오류 WO uld는 getBrowserHWND()static 메서드가 아니므로 개체 인스턴스를 호출해야합니다. 즉

, 당신은 유형 FB::PluginWindowWin의 객체를 가질 필요가, 당신은 그것을 좋아 호출 할 수 있습니다

hWnd = myPluginWindowWin.getBrowserHWND(); 
+0

당신이 내게 줄 수 이러한 객체의 예제 코드는 무엇입니까? –

+2

저는 Firebreath를 사용한 적이 없기 때문에 매우 구체적 일 수는 없습니다. Firebreath 문서에서 몇 가지 샘플 코드를 찾아서 따라야한다고 생각합니다. 그러나 http://colonelpanic.net/2010/11/firebreath-tips-drawing-on-windows/에서 블로그를 보면 FB는 이벤트 처리기를 호출하고 'PluginWindow'에 대한 포인터를 전달해야합니다. 그런 다음'PluginWindowWin'으로 형변환하고'getBrowserHWND()'를 호출 할 수 있습니다. 나는 당신이'PluginCore'를 확장하는 클래스를 작성해야한다고 생각합니다. 그렇다면 메소드 중 하나에서'this-> getWindow()'를 호출하여'PluginWindow'를 얻을 수 있습니다. 희망이 도움이됩니다. –

+0

Thx Nate, 그것을 망쳐려고 노력할 것입니다. –

1

이 코드는 아주 잘 나를 위해 작동 :

HWND myPluginAPI::getBrowserHwnd() { 
    FB::PluginWindow* pluginWindow = getPlugin()->GetWindow(); 
    FB::PluginWindowWin* w = (FB::PluginWindowWin*)(pluginWindow); 
    HWND hwndBrowser = GetAncestor(w->getHWND(), GA_ROOTOWNER); 
    return hwndBrowser; 
} 
+1

Thx, 멋지 네요. –

+0

upvote 대답!? ;-) – heinob

+0

나는 명성이 충분하지 않다. 마지막으로, 당신의'getPlugin()'이 어떻게 작동하는지 보여 줄 수 있니? –