gpt4 book ai didi

java - 使用 JNI 从 java 调用 C 函数

转载 作者:行者123 更新时间:2023-11-30 19:42:41 25 4
gpt4 key购买 nike

我有以下 C 代码。我的目标是从 java 调用 C 函数。

C 代码:

_declspec(dllimport) BYTE __stdcall  CPSC1900Connect(BYTE port, void *param);



JNIEXPORT jbyte JNICALL Java_CPSE_CPSC1900Connect(JNIEnv * env, jclass hPrinter, jbyte port, jstring Answer)
{

BYTE RC;

// I need to call CPSC1900Connect(BYTE port, void *param); function and pass (i DONT KNOW HOW TO PASS THOSE PAREMETER TO THIS METHOD.

//port and ANSWER PARAMETER. THE METHOD RETURNS BYTE WHICH I SHOULD BE VIED FROM JAVA

return Answer;
}

java代码:

public class CPSE {

public native byte CPSC1900Connect(byte port,String param);
public native String CPSC1900Disconnect(String param);
static{

try {

System.loadLibrary("dll/CPSLPT9x");
System.loadLibrary("dll/CPSRC");
System.loadLibrary("dll/CPSE");
System.loadLibrary("dll/MCHIP");


} catch (Exception e) {
System.out.println(e);
}

}

public CPSE() {

byte port=CPSC1900_USB;
param ="xx.xx.xx.xx"// ip address
byte response= CPSC1900Connect(BYTE port, void *param);


}

public static void main(String[] args)
{
new CPSE();

}

}

我的问题是:如何从 java 应用程序传递值并将其传递给 C 函数并获得响应?

最佳答案

您尝试过简单的实现吗?

JNIEXPORT jbyte JNICALL Java_CPSE_CPSC1900Connect(JNIEnv * env, jclass hPrinter, jbyte port, jstring Answer)
{

const char* param = (*env)->GetStringUTFChars(env, Answer, 0);
jbyte res = (jbyte)CPSC1900Connect((BYTE)port, (void*)param);

(*env)->ReleaseStringUTFChars(env, Answer, param);

return res;
}

这假设 CPSC1900Connectvoid* param 是只读的,否则将 param 字符串复制到本地缓冲区。

我没有编译此代码,只是编写它。如果需要,进行基本修正。

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

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