我在我正在维护的一个实用程序上运行代码分析,它建议我改变这个:
private static extern int ReadMenu1File(string Menu1Path);
...对此:
private static extern int ReadMenu1File(UnmanagedType.LPWStr Menu1Path);
...使用这种措辞:“为 P/Invoke 字符串参数指定封送处理为了降低安全风险,将参数 'Menu1Path' 封送为 Unicode,方法是将 DllImport.CharSet 设置为 CharSet.Unicode,或将参数显式封送为 UnmanagedType.LPWStr。如果您需要将此字符串编组为 ANSI 或系统相关,请显式指定 MarshalAs,并设置 BestFitMapping=false;为了增加安全性,还要设置 ThrowOnUnmappableChar=true。”
...但是当我这样做时,它说,“类型名称'LPWStr'不存在于类型'System.Runtime.InteropServices.UnmanagedType' ”和“ 'System.Runtime.InteropServices.UnmanagedType.LPWStr'是一个'字段',但用作'类型' "
代码完成没有帮助(在键入“UnmanagedType.”后没有任何建议),也没有上下文菜单选项来添加缺少的使用。