来自非托管方法的字符串中的 C# 垃圾数据

C# Garbage data in string from unmanaged Method

我有一个非托管方法的包装器:

[DllImport(DLL_LOCATION, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean voGetFirmwareVersion(StringBuilder s, ref uint d);

工作正常,正在用中文字符填充 StringBuilder。幸运的是,我知道文字应该是什么:

"Camera 0057; FPGA 0009"

我得到的是:

慬慲〠㔰㬷䘠䝐⁁〰グ㤰猀״״诗珊瑚譞珊瑚쬂☐״״造琞\u085cʩ״

我已尝试将 CharSet 更改为我的 DLLImport 标志中的所有组合,并尝试更改返回的字符串编码但无济于事。帮我上网!

编辑:我正在调用的 dll 属于我当前正在编程的设备。所有其他功能都可以使用,但上面提到的功能只会给我汉字。

再次编辑:下面是我用来调用上面方法签名的代码:

private string getFirmware()
    {            
        uint r = 31;
        StringBuilder sb = new StringBuilder(31);
        bool result = voGetFirmwareVersion(sb,  ref r);

        if(!result)
        {
            MessageBox.Show("Error Getting Firmware");
        }     

        return sb.ToString();          
    }

原来答案是将 CharSet 设置为 None。由于一开始就没有它,它默认为 Unicode。我原以为它会是 none。