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. C++構文を使用してメンバ関数を呼び出すだ関数ポインタ
- 2. 関数ポインタのスタック:関数の呼び出し方法?
- 3. kernel32.dll関数を呼び出す方法C++でLoadLibrary(..)を使用してGetTickCount()を呼び出す方法
- 4. 動的引数を使用して関数ポインタを呼び出す
- 5. テンプレートを関数呼び出しポインタで使用して完全転送する
- 6. ポインタと関数呼び出し
- 7. ajaxを使用して複数のPHP関数を呼び出す方法、ベストプラクティス?
- 8. C#でパラメータを使用してJavaScript関数を呼び出す方法
- 9. スタティック関数を使用して補完ハンドラでUIImageWriteToSavedPhotosAlbum()を呼び出す方法
- 10. C++:ポインタを介してメンバ関数を呼び出す
- 11. data.tableを呼び出す関数を呼び出す関数の記述方法?
- 12. 関数のポインタではなく関数の呼び出し名
- 13. jqueryを使ってpython関数を呼び出す方法は?
- 14. htmlボタンを使用してサーバー側の関数を呼び出す方法は?
- 15. Greasemonkeyを使用してiframeの親の関数を呼び出す方法
- 16. Retrofit androidを使用して関数phpを直接呼び出す方法
- 17. ajaxスライドショーエクステンダーのparametered関数呼び出しの使用方法は?
- 18. document.ready関数で関数を呼び出す方法をJquery
- 19. C#複数のパラメータを使用して呼び出す方法
- 20. メイン関数の呼び出し方法
- 21. javascript関数の呼び出し方法
- 22. 構造体のポインタを関数呼び出しで使用するときにポインタを追加する
- 23. パラメータを渡して関数を呼び出す方法は?
- 24. コンポーネントをクリックして関数を呼び出す方法は?
- 25. Javascript関数を使用したjQuery関数の呼び出し
- 26. 目的関数CでJavaScript関数を呼び出す方法
- 27. 別の関数で関数を呼び出す方法は?
- 28. main()を呼び出して関数を呼び出す
- 29. init_segを使用して初期化関数を呼び出す
- 30. jsファイル名を使用してjavascript関数を呼び出す