我正在尝试通过拖放将电子邮件从 Outlook 传输到 Eclipse RCP 应用程序。使用此代码片段,我发现在从 Outlook 2010 到 Java 的拖放操作期间,会传输以下本机类型:
我需要完整的消息正文,因此在拖放操作期间提供的文本是不够的。我试图扩展ByteArrayTransfer以便将本机对象转换为 Java 对象,从而提供对电子邮件的访问。像FileGroupDescriptor这样的结构是原生的 C 结构。我尝试使用 JNA 将它们读出,但 JNA 无法将 C 结构转换为我的 Structure 类的对象。
我有两个问题:
- 我的 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 "";
}