搜集(Marshaling)
“搜集”(Marshaling)是指将一个函数自变量从它原始的二进制形式转换成与语言无关的某种形式,再将这种通用形式转换成适合挪用函数回收的二进制名目。在前面的例子中,我们挪用了MessageBox()函数,并向它通报了两个字串。MessageBox()是个C函数,并且Java字串的二进制机关与C字串并不沟通。但尽量如此,自变量仍得到了正确的通报。这是由于在挪用C代码前,J/Direct已帮我们思量到了将Java字串转换成C字串的问题。这种环境适合所有尺度的Java范例。下面这张表格总结了简朴数据范例的默认对应干系:
Java C
byte BYTE或CHAR
short SHORT或WORD
int INT,UINT,LONG,ULONG或DWORD
char TCHAR
long __int64
float Float
double Double
boolean BOOL
String LPCTSTR(只答允在OLE模式中作为返回值)
byte[] BYTE *
short[] WORD *
char[] TCHAR *
int[] DWORD *
这个列表还可继承下去,但已很能说明问题了。大大都环境下,我们不必体贴与简朴数据范例之间的转换问题。但一旦必需通报用户自界说范例的自变量,环境就当即变得差异了。譬喻,大概需要通报一个布局化的、用户自界说的数据范例,可能需要把一个指针传给原始内存区域。在这些环境下,有一些非凡的编译引导呼吁标志一个Java类,使其能作为一个指针传给布局(@dll.struct引导呼吁)。欲知利用这些要害字的细节,请参考产物文档。