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. C++構文を使用してメンバ関数を呼び出すだ関数ポインタ
- 3. 関数ポインタのスタック:関数の呼び出し方法?
- 4. 関数ポインタを使用して異なるシグネチャでC++関数を呼び出す方法
- 5. AJAXを使用してPHP関数を呼び出す方法
- 6. デフォルトを使用して関数を呼び出す方法
- 7. 構造内の関数ポインタを使用してプライベート関数を呼び出す方法はありますか?
- 8. ポインタでメンバー関数を呼び出す方法
- 9. kernel32.dll関数を呼び出す方法C++でLoadLibrary(..)を使用してGetTickCount()を呼び出す方法
- 10. テンプレートを関数呼び出しポインタで使用して完全転送する
- 11. 動的引数を使用して関数ポインタを呼び出す
- 12. 関数ポインタを使ってオブジェクトのメソッドを呼び出す方法は?
- 13. リファレンスラムダ関数を使用して関数を呼び出す方法は?
- 14. 関数ポインタを引数として渡して関数を呼び出す方法はありますか?
- 15. ポインタと関数呼び出し
- 16. 呼び出す方法 - 変数を使用して関数またはスクリプトを呼び出す式?
- 17. C/C++ 1つの関数呼び出しでconst関数ポインタまたは単純ポインタを渡す方法
- 18. C++:ポインタを介してメンバ関数を呼び出す
- 19. パラメータを使用してjavascriptで関数を呼び出す方法
- 20. C#でパラメータを使用してJavaScript関数を呼び出す方法
- 21. スタティック関数を使用して補完ハンドラでUIImageWriteToSavedPhotosAlbum()を呼び出す方法
- 22. Cでリフレクションを使用してシングルトンクラスの関数を呼び出す方法#
- 23. AJAXを使用して複数の関数を呼び出す方法
- 24. ポリモフィズム引数を使用して動的に関数を呼び出す方法
- 25. ajaxを使用して複数のPHP関数を呼び出す方法、ベストプラクティス?
- 26. 関数のポインタではなく関数の呼び出し名
- 27. data.tableを呼び出す関数を呼び出す関数の記述方法?
- 28. Swift:ランダム関数を呼び出す関数を呼び出す方法は?
- 29. 別の関数呼び出しで関数を呼び出す
- 30. Cで関数呼び出しとパラメータを使用してポインタを使用するときの構文エラー