2011-09-23 47 views
5

Tôi có struct sau:C# ToCharArray không làm việc với char *

[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]; 
} 

Bây giờ, tôi muốn viết chữ vào MarketSymbol lĩnh vực:

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

Trình biên dịch ném một lỗi, nói nó không thể chuyển đổi từ char [] sang char *. Tôi phải viết cái này bằng cách nào? Cảm ơn

+1

Có thể nó giúp: http://stackoverflow.com/questions/1185269/how-to-convert-fixed-byte-char100-to-managed-char-in-c. – Samich

Trả lời

3

Như thế này:

[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; 
} 

Coi chừng gói = 1, nó là khá bất thường. Và tỷ lệ cược tốt cho CharSet.Ansi nếu điều này interops với mã C.

+0

Tính năng này không hoạt động. Sau đó tôi sắp xếp cấu trúc này thành một con trỏ với Marshal.StructureToPtr (myAttributes, Ptr, false); Tất cả các lĩnh vực khác đang làm tốt, ngoại trừ chuỗi này. – Juergen

+2

Tôi không biết ý nghĩa "không hoạt động" có thể có nghĩa là gì. Marshal.StructureToPtr không gặp rắc rối với một tuyên bố như thế này. Hãy rõ ràng về những gì bạn thấy sẽ xảy ra sai. Và lưu ý nhận xét của tôi về CharSet. –

Các vấn đề liên quan