【发布时间】:2023-03-26 15:38:01
【问题描述】:
我在 COM 中迈出了第一步,但我不断收到 System.AccessViolationException,这是其中一个异常,它不会告诉你任何有价值的东西。我正在尝试使用 SHCreateItemFromParsingName 创建一个 IShellItem。我从另一个项目中复制了接口的定义,所以我知道它没有任何问题,问题很可能出在我的函数定义/调用中,这是我自己编写的,用于学习目的。
我想调用非托管函数而不返回 IShellItem 接口,而是将它的引用传递给调用中的最后一个参数。
函数声明:
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
internal static extern uint SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IBindCtx pbc, Guid riid, out IShellItem ppv);
函数调用:
IShellItem file;
SHCreateItemFromParsingName(@"C:\file.txt", null, typeof(IShellItem).GUID, out file);
我发现 IDL 相当神秘,但我的理由是:
- HRESULT = uint
- [输入] PCWSTR = [MarshalAs(UnmanagedType.LPWStr)] 字符串
- [输入,可选] IBindCtx = IBindCtx
- [输入] REFIID = Guid
- [out] void = out IShellItem
【问题讨论】:
标签: c# com com-interop access-violation