CA2101进行外部呼叫时发出警告

时间:2012-11-13 22:20:39

标签: c# c++ visual-studio code-analysis

我正在使用WinPcap库并设置了所有本机方法调用。在构建时,我收到CA2101: Specify marshaling for P/Invoke string arguments代码分析警告。我的extern函数定义如下:

[DllImport("wpcap", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
internal static extern int pcap_compile(IntPtr /* pcap_t* */ adaptHandle,
                                        IntPtr /*bpf_program **/fp,
                                        string /*char * */str,
                                        int optimize,
                                        uint netmask);

如果我将CharSet更改为CharSet.Unicode,我会解决代码分析警告,但我的功能不再有效。如何解决警告并保持代码正常工作?

1 个答案:

答案 0 :(得分:9)

出现此警告是因为将Unicode文本截断为ASCII字符串可能会导致安全问题。

如果您不能使用Unicode字符串,请在属性上设置BestFitMapping = false, ThrowOnUnmappableChar = true以防止出现此安全问题。 有关详细信息,请参阅documentation