com4jのVersion

iTunes1.10 (Ver1.a)のタイプライブラ

今日はcom4jとiTunes

iTunesをcom4jを使ってJavaから動かすという文書はいろいろあるんだけど、最近になってiTunesLibがバージョンアップして1.10になったら、tlbimpが動かないよという話。

 public static final class Version implements Comparable<Version> {
  public final int major;
  public final int minor;
  
  public Version(String name) {
    int idx = name.indexOf('.');
    major = Integer.valueOf(name.substring(0,idx));
    minor = Integer.valueOf(name.substring(idx+1));
  }

タイプライブラリが1.10になって、Version表記が1.a(16進表記)になりました。上のソースでは10進数でparseするのでcom4jでは動かないよ。という結果。

@@ -124,10 +122,8 @@
     public static final class Version implements Comparable<Version> {
         public final int major;
         public final int minor;
+        public final String version;
         public Version(String name) {
+            version = name;
             int idx = name.indexOf('.');
+            major = Integer.valueOf(name.substring(0,idx),16);
+            minor = Integer.valueOf(name.substring(idx+1),16);
-            major = Integer.valueOf(name.substring(0,idx));
-            minor = Integer.valueOf(name.substring(idx+1));
@@ -157,8 +153,7 @@
         }
 
         public String toString() {
+            // return major + "." + minor;
+        	return version;
-            return major + "." + minor;
         }
     }
 }

こんな修正で一応動く