2011-09-23 21 views
5

Aşağıdaki yapı vardır: söyleyerekC# ToCharArray * karakteri ile çalışmıyor

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

derleyici bir hata atar:

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

Şimdi, saha MarketSymbol karakterleri yazmak istiyorum char [] 'dan char *' a dönüşemez. Bunu nasıl yazmalıyım? sayesinde Bunun gibi

+1

Belki de yardımcı olur: http://stackoverflow.com/questions/1185269/how-to-convert-fixed-byte-char100-to-managed-char-in-c. – Samich

cevap

3

:

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

paket = 1 dikkat edin, oldukça sıradışı. Ve C kodu ile bu interops ise CharSet.Ansi için iyi oranlar.

+0

Bu işe yaramıyor. Daha sonra bu yapıyı Marshal.StructureToPtr ile işaretledim (benimAttributes, Ptr, false); Bu dize hariç diğer tüm alanlar iyi gidiyor. – Juergen

+2

"Çalışmıyor" ifadesinin ne anlama geldiği hakkında hiçbir fikrim yok. Marshal.StructureToPtr'un böyle bir beyanda bulunmasında bir sıkıntı yok. Gördüğünüz şey hakkında yanlış olun. Ve CharSet hakkındaki yorumumu not alın. –