0

これはITLSSPProc.dllからのネイティブメソッドです

NOMANGLE int CCONV OpenSSPComPort (SSP_COMMAND * cmd);

ここで、SSP_COMMANDは、C++言語のITLSSPProc.dllの構造体です。

struct SSP_COMMAND
{
unsigned long BaudRate;
unsigned char PortNumber;
};

したがって、JNIを使​​用してJavaでOpenSSPComPort(SSP_COMMAND * cmd)にアクセスする必要があります。これが私が書いたコードです、

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です。したがって、このアプリケーションを実行し、ユーザーマニュアルに記載されているように手動でボーレートを渡すと、ポート番号が正しい場合は、コンソールに「接続済み」と印刷する必要があります。だから、誰もが私がどこで間違っているのか知っています、私は実際の問題がどこにあるのかわかりません。

4

1 に答える 1

0

基本型( long、 )の JNA ドキュメントchar

集約型( struct、 )の JNA ドキュメントstruct *

// tl;dr
class SSP_COMMAND extends Structure {
    public NativeLong BaudRate;
    public byte PortNumber;
}

int OpenSSPComPort(SSP_COMMAND param)
于 2013-01-25T14:18:10.373 に答える