我想使用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/