我正在創建一個Android應用程序,它從C庫中提取方法。一個C庫中所使用的方法看起來像這樣...(按照指針val
這是作爲功能second parameter
通過。)使用NDK時指針/參考
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;
}
甲被定義爲unsigned char
。我需要從我的Java函數中調用GetVal
方法。我的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太清楚),參考這一長期通過函數傳遞。在該函數內,指向val
的指針被分配一個值。
有沒有辦法在C中使用一個方法,該方法傳遞一個對NULL變量的引用,然後將該變量賦值給一個值?
編輯:
爲了澄清,我使用含有上述GETVAL方法的庫。我正在鏡像Palm Pilot API,這是第二個代碼塊的來源。第三個代碼塊是我從Java調用到C庫中的GetVal方法。
您可以發佈JNI封裝的功能? – Renard 2012-07-06 14:11:12
我很樂意,但你是什麼意思的包裝功能? – JuiCe 2012-07-06 14:12:27
我假設你使用jni從java調用native c?如果是這樣,請發佈您的jni代碼。 – Renard 2012-07-06 14:15:58