成员上的非静态链路错误C2352

Non static link on the member Error C2352

本文关键字:链路 错误 C2352 静态 成员      更新时间:2023-10-16

大家好。
我正在写一个插件与FireBreath。由于我的c++知识不够,出现了一个小问题,请看下面的代码。

我不明白,为什么函数FB::PluginWindowWin::getBrowserHWND(),返回HWND我不想为GetWindowRect(hWnd, &rect)的功能做HWND

编译器从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(); 

该错误将表明getBrowserHWND()不是static方法,因此需要一个对象实例来调用它。

换句话说,您需要有一个FB::PluginWindowWin类型的对象,然后您可以这样调用它:

hWnd = myPluginWindowWin.getBrowserHWND();

这段代码很适合我:

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