我正在创建一个从 C 库中提取方法的 Android 应用程序。C 库中使用的方法之一看起来像这样......(跟随val
作为函数传递的指针second parameter
。)
BYTE __stdcall GetVal(WORD what, long *val){
DWORD relaydate;
BYTE tmpb;
DWORD tmpd;
WORD tmp;
#ifdef HASTHAILANDSWAP
WORD what2;
#endif
if(val) *val=0;
if(!CheckInit()) return ERR_NOT_INIT;
if(what==VAL_NULL){
if(RelayAPI_DataValid){
return 0;
}else{
return -1;
}
}
if(!CheckValid()) return ERR_READ_FAIL;
switch(what){
case VAL_SWVERSION:
*val=RelayAPI_SWVersion;
return 0;
case VAL_VOLTAGE:
*val=RelayAPI_Voltage;
return 0;
case VAL_VERSION:
*val=RelayAPI_Version;
return 0;
case VAL_ISSMUD:
*val=RelayAPI_isSMUD;
return 0;
}
ABYTE
被定义为unsigned char
。我需要GetVal
从我的 Java 函数中调用该方法。我的 Java 代码的功能应该与这个 C 代码相匹配......
long val;
char buff[20];
if( !GetVal (VAL_SERIAL, &val) ) {}
这就是我迄今为止在我的 Java 代码中所拥有的(我知道这是不对的,我知道你不能像那样在 Java 中使用引用,我只是向你展示我所拥有的。):
public void updateForm() {
int val;
char buff[];
/**
* SERIAL NUMBER
*/
if( !GetVal( RelayAPIModel.VAL_SERIAL, &val ) ) { }
}
因此,val
初始化为null
(我假设,我不太了解 C),对这个 long 的引用通过函数传递。在函数中,一个指向的指针val
被赋值。
无论如何在C中使用一个方法,它传递一个对NULL变量的引用,然后为引用的变量分配一个值?
编辑 :
为了澄清,我正在使用一个包含上述 GetVal 方法的库。我正在镜像 Palm Pilot API,这是第二个代码块的来源。第三个代码块是我从 Java 调用 C 库中的 GetVal 方法。