これはなに?

Cアプリ

Java アプリ

package com.snail.jnaexam;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Structure;
import java.util.Date;

public class App {

    public interface CLibrary extends Library {

        CLibrary INSTANCE = (CLibrary) Native.loadLibrary("JNAExamC", CLibrary.class);

        void getGeoData(GEODATA gd);
    }

    public static class GEODATA extends Structure {

        public NativeLong time;
        public String tzone;
        public double longitude;
        public double latitude;
        public double altitude;
    }

    public static void main(String[] args) {
        GEODATA gd = new GEODATA();
        CLibrary.INSTANCE.getGeoData(gd);

        System.out.println(new Date(gd.time.longValue()) + " (" + gd.tzone + ")");
        System.out.println("(" + gd.longitude + "," + gd.latitude + ")" + gd.altitude);
    }
}

実行結果

$ export LD_LIBRARY_PATH=/Users/Atsushi/NetBeans/JNAExamC/dist/Debug/GNU-MacOSX/
$ java -classpath /Users/Atsushi/NetBeans/JNAExam/target/JNAExam-1.0-SNAPSHOT.jar com.snail.jnaexam.App
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Thu Jan 01 09:00:32 JST 1970 (JST)
(135.0,35.0)36000.0

ちゃんと呼び出せているっぽい
なんか time(NULL) の返値が 0 になっているけど、JNAはちゃんと動いているから、まぁいいや。(Apple の gcc がおかしい?)
Linux だと

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char** argv) {
    time_t now;
    struct tm *t_st;

    now = time(NULL);
    t_st = localtime(&now);
    
    printf("%d",(1900 + t_st->tm_year));
    return 0;
}

は、2011 を返すんだけど・・・


Java


添付ファイル: filejna1.png 653件 [詳細] filejna2.png 631件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2011-04-11 (月) 01:58:26 (2063d)
ISBN10
ISBN13
9784061426061