- 9 名前:デフォルトの名無しさん [2016/02/13(土) 10:14:00.39 ID:3L3e3K/U.net]
- stdcallな関数だとさらにこんな感じだよ
julia> user32 = Base.Libdl.dlopen_e("user32.dll") Ptr{Void} @0x2c767300 julia> MessageBoxA = Base.Libdl.dlsym(user32, :MessageBoxA) Ptr{Void} @0x76c6cf50 julia> err = ccall(MessageBoxA, stdcall, UInt, (Ptr{UInt}, Ptr{Cchar}, Ptr{Cchar}, UInt), 0, "Hello, work!", "Message", 0) 0x00000001 wchar_tはArray{UInt16,1}らしい(UTF8を表示したければ先にwchar_tへの変換が必要) julia> MessageBoxW = Base.Libdl.dlsym(user32, :MessageBoxW) Ptr{Void} @0x76c6d280 julia> err = ccall(MessageBoxW, stdcall, UInt, (Ptr{UInt}, Ptr{Cwchar_t}, Ptr{Cwchar_t}, UInt), 0, Array{UInt16,1}([0x304C,0x3063,0xFF01,0]), Array{UInt16,1}([0x306C,0x308B,0x307D,0]), 0) 0x00000001 julia> Base.Libdl.dlclose(user32) 解放解放 引数や戻り値の定義を呼び出しのたびに何度も書くの面倒なのでマクロを書くのが良いらしいよ
|

|