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. 使用Emscripten调用函数指针
- 3. 使用基类指针调用函数?
- 4. 如何在MASM中调用指向函数的指针
- 5. C++调用函数指针
- 6. 调用Const函数指针
- 7. 指向指针的指针在调用函数时获得EXC_BAD_ACCESS
- 8. 如何使用函数指针调用对象的方法?
- 9. C++指针 - ressignment在函数调用
- 10. 指针在Objective-C函数调用
- 11. 使用指针地址在Python中调用函数
- 12. 在函数中使用双指针
- 13. 函数内使用指针调用函数 - C
- 14. 使用函数指针映射时的C++调用函数
- 15. 如何通过此函数的指针调用winapi函数?
- 16. 如何通过成员函数指针调用成员函数?
- 17. 用指针调用类函数问题
- 18. C++指针,引用和函数调用
- 19. 通用指针调用C函数
- 20. 使用函数指针?
- 21. 函数指针的使用
- 22. 如何通过函数指针和参数在C++中调用函数
- 23. 如何在C中的struct中使用函数指针?
- 24. 在指针使用函数后,如何更改指针指向的对象
- 25. 从函数返回指针并用指针递归调用函数 - BST
- 26. 使用函数指针从线程调用回调
- 27. 如何在C中使用结构体,指针和函数?
- 28. 如何在Win64上使用varargs和C中的函数指针?
- 29. 如何在C函数中使用双指针分配内存?
- 30. 如何在不同的类中使用函数指针?