OutlookからEclipseRCPアプリケーションにドラッグアンドドロップでメールを転送しようとしています。このコードスニペットを使用して、Outlook2010からJavaへのドラッグアンドドロップ操作中に次のネイティブタイプが転送されることがわかりました。
メッセージ本文全体が必要なため、ドラッグアンドドロップ操作中に提供されたテキストでは不十分です。ネイティブオブジェクトをJavaオブジェクトに変換するために、ByteArrayTransferを拡張しようとしました。これにより、電子メールへのアクセスが提供されます。FileGroupDescriptorのような構造体は、ネイティブC構造体です。JNAを使用してそれらを読み出そうとしましたが、JNAはC構造体をStructureクラスのオブジェクトに変換できません。
2つの質問があります:
- JNAコードの何が問題になっていますか?
- 誰かがJavaでネイティブのドラッグアンドドロップ構造を読み取るためのより良い方法を知っていますか?
拡張ByteArrayTransferクラスのコード:
public class FileGroupDescriptor extends Structure {
public int cItems;
public FileDescriptor[] fgd;
public FileGroupDescriptor() {
super();
}
public FileGroupDescriptor(Pointer pointer) {
super(pointer);
}
}
public Object nativeToJava(TransferData transferData) {
if (transferData.type == 49478) {
Native.setProtected(true);
byte[] buffer = (byte[]) super.nativeToJava(transferData);
Memory memory = new Memory(buffer.length);
memory.write(0, buffer, 0, buffer.length - 1);
Pointer p = memory.getPointer(0);
FileGroupDescriptor groupDescriptor = new FileGroupDescriptor(p);
System.out.println(groupDescriptor.cItems);
}
return "";
}