2013-03-26 139 views
0

美好的一天。
我正在寫一個FireBreath的插件。微小的問題是由於我的C++知識欠佳而出現的,請參閱下面的代碼。會員的非靜態鏈接錯誤C2352

我不明白,爲什麼功能FB::PluginWindowWin::getBrowserHWND(),返回HWND 不想爲HWND工作爲GetWindowRect(hWnd, &rect)功能。

編譯器從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

你能不能給我這樣的對象的示例代碼? – 2013-03-26 18:37:33

+2

我從來沒有使用Firebreath,所以我不能夠非常具體。我想你需要在Firebreath文檔中找到一些示例代碼並遵循它。但是在http://colonelpanic.net/2010/11/firebreath-tips-drawing-on-windows/看一個博客,看起來FB應該調用你的事件處理程序並傳遞一個指向'PluginWindow'的指針,你然後可以投射到'PluginWindowWin'並調用'getBrowserHWND()'。我想你應該寫一個擴展'PluginCore'的類。如果是這樣,你可以在它的一個方法中調用'this-> getWindow()'來獲得'PluginWindow'。希望有所幫助。 – 2013-03-26 19:49:39

+0

Thx Nate,會試圖搞砸它。 – 2013-03-26 20:58:33

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,太棒了。 – 2013-03-27 23:20:48

+0

upvote答案! ;-) – heinob 2013-03-28 06:23:50

+0

我不能沒有足夠的聲望) 那麼,最後一件事,你能告訴我你的'getPlugin()'是如何工作的嗎? – 2013-03-28 15:27:07