我试图理解平台调用服务、组件对象模型等概念,但我发现很难理解什么是什么以及不同的职责所在。我一直在研究包含以下内容的代码:
[DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
internal static extern object SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IBindCtx pbc, ref Guid riid);
[ComImport]
[Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IShellItem
Run Code Online (Sandbox Code Playgroud)
据我了解,前者导入一个创建 shell 项的函数,后者导入创建它们所需的类型(接口)。
我不明白的是为什么一个使用 DllImport 而另一个使用 ComImport。它们各自的文档中没有任何内容说明要使用哪种方法,也没有提供 COM 对象的 GUID。我唯一的猜测是,区别因素是前者是一个函数,后者是一个接口。
我想在特定目录中查找包含特定字符串的所有文件。具体来说,我想查找回车符(\ r),然后手动浏览文件并删除出现的文件。我不希望PowerShell删除它们,因为在我的目录结构中可能需要某些子目录。
我使用 bit(1) 来表示布尔值,但是当我使用 mysqldump 将表转储到文件中时,输出的数据不会以我期望的格式出现。
我在表中看到的内容(phpMyAdmin):
0 1
Run Code Online (Sandbox Code Playgroud)
我在文件(mysqldump)中看到的内容:
SOH \0
Run Code Online (Sandbox Code Playgroud)
如果我使用 phpMyAdmin 的导出功能,我会看到什么:
b'0' b'1'
Run Code Online (Sandbox Code Playgroud)
我是否需要使用标志或者这是位数据类型的安全表示?
我正在尝试在文件中找到回车符(\r)和新行(\n),但以下两个语句不返回任何内容:
Get-ChildItem -recurse | Select-String -pattern "\r" | group path | select name
Get-ChildItem -recurse | Select-String -pattern "\n" | group path | select name
Run Code Online (Sandbox Code Playgroud)
但是,tab(\t)转义字符似乎工作:
Get-ChildItem -recurse | Select-String -pattern "\t" | group path | select name
Run Code Online (Sandbox Code Playgroud)