내 문제는 다음과 같습니다. I 직렬 포트를두 클래스가 공유하는 JNI DLL이 동일한 함수 주소 공간을 사용합니까?
public class Serial{
final static int NOT_INITIALIZED = 0;
final static int INITIALIZED = 1;
private int instanceId;
private String errorString;
private native int initPort(String port);
private native int termPort(int instanceId);
private native int getState(int instanceId);
private native int readPort(int instanceId);
private native int writePort(int instanceId);
/*... publically accessible methods follow */
}
따라서 여러 종류를 통해 통신하기 위해 비 정적 원시 메소드를 사용하여 클래스를 인스턴스화 할 수 있고, 특정 직렬 포트마다. 내가 이렇게하는 이유는 JNI 코드를 호출 한 인스턴스에 대해 JNI 코드에서 "errorString"필드 (오류가 발생할 때)를 설정할 수있게하기 위해서입니다.
나는 같은 JVM의 여러 인스턴스가 동일한 JNI DLL을 공유하는 것을 배웠습니다. 따라서 dll에 정의 된 모든 전역 변수는 여러 인스턴스에서 공유됩니다. 이러한 이유로 통신 핸들과 상태 변수는 구조체의 전역 배열에 저장됩니다. initPort()가 호출되면 instanceId 필드는 포트 핸들과 상태 (INITIALIZED 또는 NOT_INITIALIZED)가 포함 된 배열 인덱스로 설정됩니다.
는 내가 이해하지 못하는 것은 DLL 함수가 여러 인스턴스가 공유하는 방법이다. 그들은 각각 자신의 함수 사본을 얻습니까? 아니면 같은 함수를 호출하면 동시에 오류가 발생합니까? 당신이이 개 스레드에서 동일한 기능을 호출하는 경우