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不为null,则会抛出内存访问期望
我应该改变什么?我认为它可能由于PCWSTR映射而失败。
答案 0 :(得分:0)
第二个参数应该是指向struct的指针,而不是整数值(IntByReference
)的地址。如果您不打算使用它,请将其保留为Pointer
。
在这种情况下,可以通过null
。
您不需要初始化PointerByReference
。 JNA将传递一个内存缓冲区,该内存缓冲区将由调用的函数初始化;然后,您可以调用.getValue()
来获取返回的指针值,即IShellItem[2]
。
答案 1 :(得分:0)
尽管技术指出了映射错误,但这些错误不会给您带来的结果。 -2147024894的HRESULT
表示系统找不到文件。您的dd.txt
文件不在程序有权访问的路径中。
此外,您可以使用WString
类型来指定您需要一个宽字符串。将您的dd.txt
(或更长的路径)包装在WString
构造函数中并传递它。