5
A
回答
7
如果您從C函數獲得函數指針,則需要確保將其正確解釋爲指向FunctionType的指針。然後,您可以簡單地將它稱爲JavaScript函數。例如,GetProcAddress()
返回一個函數指針 - 在下面的代碼我聲明GetProcAddress()
有空隙的指針作爲返回類型,然後我投該指針的函數類型匹配MessageBox()
函數的簽名:
Components.utils.import("resource://gre/modules/ctypes.jsm");
var BOOL = ctypes.int32_t;
var HANDLE = ctypes.voidptr_t;
var HMODULE = HANDLE;
var HWND = HANDLE;
var FARPROC = ctypes.voidptr_t;
var LPCTSTR = ctypes.jschar.ptr;
var LPCSTR = ctypes.char.ptr;
var kernel = ctypes.open("kernel32.dll");
var LoadLibrary = kernel.declare(
"LoadLibraryW",
ctypes.winapi_abi,
HMODULE, // return type
LPCTSTR // parameters
);
var FreeLibrary = kernel.declare(
"FreeLibrary",
ctypes.winapi_abi,
BOOL, // return type
HMODULE // parameters
);
var GetProcAddress = kernel.declare(
"GetProcAddress",
ctypes.winapi_abi,
FARPROC, // return type
HMODULE, LPCSTR // parameters
);
// Load the library we're interested in.
var hUser = LoadLibrary("user32");
// Get the pointer to the function.
var MessageBox = GetProcAddress(hUser, "MessageBoxW");
// Now we have a pointer to a function, let's cast it to the right type.
var MessageBoxType = ctypes.FunctionType(
ctypes.winapi_abi,
ctypes.int32_t, // return type
[HWND, LPCTSTR, LPCTSTR, ctypes.uint32_t] // parameters
);
MessageBox = ctypes.cast(MessageBox, MessageBoxType.ptr);
// Actually call the function.
MessageBox(null, "Test1", "Test2", 0);
// Free the library again if no longer needed. Any imported function
// pointers should be considered invalid at this point.
FreeLibrary(hUser);
相關問題
- 1. 使用指針數組調用函數
- 2. 如何調用此函數指針
- 3. 如何調用類指針函數
- 4. 如何調用帶參數指針的函數指針?
- 5. 使用基類指針調用函數?
- 6. 調用使用函數指針
- 7. 使用Emscripten調用函數指針
- 8. 如何在MASM中調用指向函數的指針
- 9. 調用函數指針
- 10. 調用Const函數指針
- 11. C++調用函數指針
- 12. 如何在函數指針中使用函數的地址?
- 13. 指向指針的指針在調用函數時獲得EXC_BAD_ACCESS
- 14. 如何使用函數指針調用對象的方法?
- 15. 如何正確使用函數指針
- 16. 如何使用指針函數?
- 17. 如何使用函數指針?
- 18. 如何在類定義中調用指針成員函數?
- 19. 指針在Objective-C函數調用
- 20. C++指針 - ressignment在函數調用
- 21. 使用指針地址在Python中調用函數
- 22. 在C++中使用指針調用函數
- 23. 在函數中使用雙指針
- 24. C++中的函數指針:錯誤:必須使用'。*'或' - > *'來調用函數中的指針 - 成員函數
- 25. 如何通過此函數的指針調用winapi函數?
- 26. 一堆函數指針:如何調用函數?
- 27. 如何通過成員函數指針調用成員函數?
- 28. 使用函數指針映射時的C++調用函數
- 29. 函數內使用指針調用函數 - C
- 30. 通用指針調用C函數