java - JNA 将 Java String 映射到 PCWSTR

标签 java c shell jna

SHSTDAPI SHCreateItemFromParsingName(
  PCWSTR   pszPath,
  IBindCtx *pbc,
  REFIID   riid,
  void     **ppv
);

我试图将上面的方法映射到这个方法:

WinNT.HRESULT SHCreateItemFromParsingName(String pszPath, Pointer p, Guid.REFIID riid, PointerByReference ppv);

编辑:

PointerByReference ppv = new PointerByReference();

        Guid.REFIID rid = new Guid.REFIID(new Guid.IID(Shell32Extra.IID_IShellItem));

        WinNT.HRESULT h = Shell32Extra.INSTANCE.SHCreateItemFromParsingName("*.txt",null,rid,ppv);

        IShellItem shellItem = new IShellItem(ppv.getValue());

但是 HRESULT 抛出失败并返回 -2147024894

如果 pbc 不为空,它会抛出内存访问预期

我应该改变什么?我认为它可能因 PCWSTR 映射而失败。

最佳答案

虽然 technomage 会指出映射错误,但这些错误不会给您带来您得到的结果。 -2147024894 的 HRESULT 表示系统找不到该文件。您的 dd.txt 文件不在程序有权访问的路径中。

此外,您可以使用 WString 类型来指定您需要一个宽字符串。将您的 dd.txt(或更长的路径)包装在 WString 构造函数中并传递它。

关于java - JNA 将 Java String 映射到 PCWSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012538/

相关文章:

java - 是否可以在java中实例化接口(interface)?

java - 如何正确清除 Java 中的整个二叉树?

java - && (AND) 和 || (OR) 在 IF 语句中

c - 外部变量

regex - 检查小数点,如果不存在,则使用 awk/perl 将其添加到末尾

perl - 从 UI 访问远程计算机时无法通过 shell 脚本 ssh 到远程计算机

macos - 时间命令的非法选项

java - 如何将数组转换为字符数组?

检查输入中的换行符

iphone - long long 到字节数组