0

得到这个代码:(
我正在使用 FireBreath)

TestPluginAPI.h
FB::variant ClickSemulationMove(POINT);
FB::variant ClickSemulationClick(POINT);



TestPluginAPI.cpp

FB::variant TestPluginAPI::ClickSemulationClick(POINT pt)
{
ShowCursor(true);
MouseLeft();
MouseReturn(pt.x, pt.y);
ShowCursor(true);
return 0;
}

FB::variant TestPluginAPI::ClickSemulationMove(POINT &pt)
{
MouseMove(-325, 605);
POINT pt;
GetCursorPos(&pt);
return 0;
} 

这个想法是,首先ClickSemulationMove保存ptGetCursorPos我需要这个pt,因为我必须在移动鼠标之前得到它,然后返回那里。)然后将它传递ClickSemulationClick给使用MouseReturn
但是我遇到了以下错误:
C2511: FB::variant TestPluginAPI::ClickSemulationMove(POINT &) overloaded member function not found in "TestPluginAPI" 并且 error C2665: FB::variant_detail::conversion::convert_variant: none of the 5 overloads can convert all parameter(这个错误在下面有一堆代码和参数,如果需要会发布)这听起来很简单,但我到底做错了什么?

4

1 回答 1

1

这里有2个问题;第一个是您不能通过引用将参数传递给 NPAPI 方法,因此也不能传递给 firebreath 方法。其次,您不能只使用任意类型。

你有几个选择:

  1. 对于输入,我建议您将 int x, int y 传递给函数。
  2. 对于输出,您可以传递您解码的字符串或带有您需要的值的 FB::VariantList,这将成为一个 javascript 数组。您还可以返回一个 FB::VariantMap ,它将成为一个 javascript 对象,允许您传递命名的 x 和 y 值。
  3. 如果您真的希望能够通过引用传递事物,您可以传入一个 FB::JSObjectPtr,它需要是您保存在 javascript 中的 javascript 对象或数组({} 或 [])。然后,您可以通过调用 ->SetProperty("x", xval) 等或 ->SetProperty(0, xval) 来更改它(如果您使用了数组)。你也可以调用 ->Invoke("push", FB::variant_list_of(xval)) 来推入数组。
于 2013-04-06T05:03:33.360 回答