我想使用ccall從julia調用File I/O函數(即CreateFile,WriteFile等)。從Julia調用Win32函數
我必須在ccall中指定一個庫名作爲參數來調用win32 api中的任何函數嗎?如果是,我如何確定相應的dll的名稱?
我想使用ccall從julia調用File I/O函數(即CreateFile,WriteFile等)。從Julia調用Win32函數
我必須在ccall中指定一個庫名作爲參數來調用win32 api中的任何函數嗎?如果是,我如何確定相應的dll的名稱?
是的,你需要提供一個庫名稱。 ccall
的第一個參數是形式爲(:function, "library")
的元組。所以,如果你打電話GetTickCount
它將是(:GetTickCount, "kernel32")
。
您還需要指定調用約定,返回值類型和參數類型。在GetTickCount
的情況下,這將是:
tickCount = ccall((:GetTickCount, "kernel32"), stdcall, UInt32,())
要找出調用約定,返回值類型和參數類型,查找功能MSDN上。例如,GetTickCount
在這裏:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408.aspx。請注意,頁面最底部是一個包含導出函數的庫的名稱的表。在這種情況下,kernel32
。
這裏全部包含一些細節:http://julia.readthedocs.org/en/latest/manual/calling-c-and-fortran-code/