【问题标题】:C# ToCharArray does not work with char*C# ToCharArray 不适用于 char*
【发布时间】:2011-09-23 13:10:10
【问题描述】:

我有以下结构:

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
unsafe public struct Attributes
{

    public OrderCommand Command { get; set; }

    public int RefID { get; set; }

    public fixed char MarketSymbol[30];
}

现在,我想向 MarketSymbol 字段写入字符:

string symbol = "test";
Attributes.MarketSymbol = symbol.ToCharArray();

编译器抛出一个错误,说它无法从 char[] 转换为 char*。 我怎么写这个? 谢谢

【问题讨论】:

标签: c# string pointers arrays


【解决方案1】:

像这样:

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct Attributes
{
    public OrderCommand Command { get; set; }
    public int RefID { get; set; }
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
    public string MarketSymbol;
}

注意pack = 1,这是很不寻常的。如果它与 C 代码互操作,那么 CharSet.Ansi 的可能性很大。

【讨论】:

  • 这行不通。后来我用 Marshal.StructureToPtr(myAttributes, Ptr, false); 将此结构编组为一个指针。除了这个字符串之外,所有其他字段都做得很好。
  • 我不知道“行不通”是什么意思。 Marshal.StructureToPtr 对这样的声明没有任何问题。明确说明您看到的问题。并注意我对 CharSet 的评论。
猜你喜欢
  • 2012-08-20
  • 2013-01-02
  • 2021-12-02
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2022-12-11
相关资源
最近更新 更多