我正在尝试创建一个可以从 JavaScript 调用的自定义 C++ 函数。该功能是一个简单的调整窗口大小的功能。
我在以下地方有以下位:
在 appshell_extensions_platform.h 中:
#if defined(OS_WIN)
void ResizeWindow(CefRefPtr<CefBrowser> browser, int width, int height);
#endif
在 appshell_extensions_win.cpp 中:
void ResizeWindow(CefRefPtr<CefBrowser> browser, int width, int height) {
OutputDebugString(L"ResizeWindow");
CefWindowHandle hWnd = browser->GetHost()->GetWindowHandle();
SetWindowPos(hWnd, 0, 0, 0, width, height, SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
}
在 appshell_extensions.js 中:
/**
* Resize the window to the given size.
*
* @param {number} width
* @param {number} height
*
* @return None. This is an asynchronous call that sends all return information to the callback.
*/
native function ResizeWindow();
appshell.app.resizeWindow = function (width, height) {
ResizeWindow(width, height);
};
在 appshell_extensions.cpp 中:
} else if (message_name == "ResizeWindow") {
// Parameters:
// 0: int32 - width
// 1: int32 - height
int width = argList->GetInt(0);
int height = argList->GetInt(1);
ResizeWindow(browser, width, height);
}
然后,我使用 Visual Studio 2012 在 Debug Win32 版本上构建和调试。当我打开控制台时,appshell.app.resizeWindow
是否如预期的那样。我可以调用它,它工作得很好。如果我在函数中添加额外的 JavaScript 代码,它也可以工作。
在 中的函数中appshell_extensions.cpp
,我添加了OutputDebugString(std::wstring(message_name.begin(), message_name.end()).c_str());
. 对于我写的功能以外的功能,它会正确输出消息名称。对于我写的那一篇,我什么也得不到。
我也没有从函数本身获得输出。
看来消息实际上并没有到达处理它的函数,但我不知道。我只是使用括号壳(转换为2012)附带的 sln 来编译。是否有我可能缺少的构建步骤或其他什么?
谢谢。