【发布时间】:2013-01-25 11:53:27
【问题描述】:
这是来自 ITLSSPProc.dll 的本机方法
NOMANGLE int CCONV OpenSSPComPort (SSP_COMMAND * cmd);
这里,SSP_COMMAND 是 C++ 中的 ITLSSPProc.dll 中的结构 语言。
struct SSP_COMMAND
{
unsigned long BaudRate;
unsigned char PortNumber;
};
所以,我必须使用 Java 访问 OpenSSPComPort (SSP_COMMAND * cmd) JNI。这是我写的代码,
public class Main {
public interface ITLSSPProc extends Library {
ITLSSPProc INSTANCE = (ITLSSPProc) Native.loadLibrary(
(Platform.isWindows() ? "ITLSSPProc" : "simpleDLLWindowsPort"), ITLSSPProc.class);
int OpenSSPComPort(Pointer param);
int CloseSSPComPort();
}
public static void main(String[] args)throws IOException {
ITLSSPProc sdll = ITLSSPProc.INSTANCE;
Memory intMem = new Memory(10); // allocating space
intMem.setLong(0,9600);
intMem.setString(1,"com7");
if(sdll.OpenSSPComPort(intMem)==1)
{// calling function with int parameter&result
System.out.println("connected");
}
else
{
System.out.println("failed");
}
}
}
Output : failed
端口号是我们正在使用的 COM7。所以,当我运行这个 应用程序,并且当我按照用户中给出的手动传递波特率时 手动,如果端口号正确,则必须打印“已连接” 安慰。所以,任何人都知道我哪里出错了,我不明白 实际问题在哪里..
【问题讨论】:
-
阅读有关类型映射的 JNA 文档,特别是 w/r/t 映射原生
long、char和struct类型。
标签: java dll java-native-interface jna