Win32 functions that have multiple return values typically handle them by having the caller pass a pointer to a variable to be updated. For example, the GetDiskFreeSpace function has the following prototype:
BOOL GetDiskFreeSpace(LPCTSTR szRootPathName,
DWORD *lpSectorsPerCluster,
DWORD *lpBytesPerCluster,
DWORD *lpFreeClusters,
DWORD *lpClusters);
GetDiskFreeSpace is typically called as follows:
DWORD sectorsPerCluster, bytesPerCluster, freeClusters, clusters;
GetDiskFreeSpace(rootname, §orsPerCluster,
&bytesPerCluster, &freeClusters, &clusters);
In Java, this is just a special case of passing scalar arrays where the array size is one element. The following example shows how to call the GetDiskFreeSpace function:
class ShowGetDiskFreeSpace
{
public static void main(String args[])
{
int sectorsPerCluster[] = {0};
int bytesPerCluster[] = {0};
int freeClusters[] = {0};
int clusters[] = {0};
GetDiskFreeSpace("c:\\", sectorsPerCluster, bytesPerCluster,
freeClusters, clusters);
System.out.println("sectors/cluster = " + sectorsPerCluster[0]);
System.out.println("bytes/cluster = " + bytesPerCluster[0]);
System.out.println("free clusters = " + freeClusters[0]);
System.out.println("clusters = " + clusters[0]);
}
/** @dll.import("KERNEL32") */
private native static boolean GetDiskFreeSpace(String rootname,
int pSectorsPerCluster[], int pBytesPerCluster[],
int pFreeClusters[], int pClusters[]);
}