我試圖創建一個自定義的C++函數,我可以從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,然後我構建和調試的調試Win32發佈。當我打開控制檯時,appshell.app.resizeWindow
就像預期的那樣。我可以稱它,它工作得很好。如果我在該函數中添加了其他JavaScript代碼,它也可以工作。
對於函數appshell_extensions.cpp
,我添加了OutputDebugString(std::wstring(message_name.begin(), message_name.end()).c_str());
。對於我寫的函數以外的函數,它將正確輸出消息名稱。對於我寫的那個,我一無所獲。
我沒有從函數本身獲得輸出。
它似乎消息實際上並沒有得到處理它的函數,但我沒有任何線索。我只是使用括號-shell(轉換爲2012)附帶的sln進行編譯。是否有構建步驟,我可能會失蹤或什麼?
謝謝。
嗨Czarek,感謝您的評論。我好像從ProcessMessageDeletegate :: OnProcessMessageReceived得到了一些輸出。我唯一不會的時候是我添加的函數被調用(或者不是,因爲我懷疑這種情況可能會發生)。如果我調用其他任何東西,比如DragWindow函數,我會在我的輸出中看到「DragWindow」。這不僅僅是我自己的功能。 – samanime
@samanime嘗試重建VS項目,這可能是一些緩存問題。打掃。重建它。 –
@samanime這也可能是你正在編輯錯誤的文件或在錯誤的時間。在重建項目之前編輯.js文件。 –