2015-05-31 72 views
2

我想使用ccall從julia調用File I/O函數(即CreateFile,WriteFile等)。從Julia調用Win32函數

我必須在ccall中指定一個庫名作爲參數來調用win32 api中的任何函數嗎?如果是,我如何確定相應的dll的名稱?

回答

4

是的,你需要提供一個庫名稱。 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/