gpt4 book ai didi

java - 在android NDK的java类中调用C函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:46 25 4
gpt4 key购买 nike

我的 NDK 应用程序有一个 c 文件 (ht_NDK.c) 的函数,

int heatcon_readtemperature(char* temperature)
{
int nret,ok;
char cmd[3]={'d',0x0d, 0x0a};
struct pollfd pfd;
static int i=0;
char read_temp[255]="banagalore";
i++;
memcpy(temperature, &read_temp, i);
if(i==10)
i=0;
return nret;
}

在另一个 c 文件(second.c)中,我调用上面的函数,如下所示,

jstring
Java_com_example_ndk_ReadData_readData( JNIEnv* env,
jobject this,jstring printMatter, jint j)
{
char sz[55] = {0};
return((*env)->NewStringUTF(env, heatcon_readtemperature(sz)));

}

上面的函数在我的 java 类(ReadData.java)中调用,如下所示

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_data);


btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

ReadData rd = new ReadData();
String n = rd.readData();
Log.i("NDK", "msg" +n);
}
});

}

static
{
System.loadLibrary("ht");
System.out.println("loded library");
}


public native int[] readData();

}
}

所以每当我按下按钮时,值应该打印在控制台上,一切都很好,但它打印空值。如何在 java 类中调用 char 数据类型。我想我错过了一些东西。如何解决?

最佳答案

你的第一个函数输出两件事:

  • 它返回一个 int 值(未初始化,您需要修复它)
  • 它修改了 char* 参数。

当您创建 java 字符串 (NewStringUTF) 时,您传递了 int 返回值。您可能打算改为传递 char* 值:

char sz[55] = {0};    
heatcon_readtemperature(sz);
return (env*)->NewStringUTF(env, sz);

关于java - 在android NDK的java类中调用C函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13133302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com