2011-09-23 18 views
5

que tiene la siguiente estructura:C# ToCharArray no funciona con 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]; 
} 

Ahora, yo quiero escribir caracteres a la MarketSymbol campo:

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

El compilador genera un error, diciendo no puede convertir de char [] a char *. ¿Cómo debo escribir esto? Gracias

+1

Tal vez ayude: http://stackoverflow.com/questions/1185269/how-to-convert-fixed-byte-char100-to-managedchar-in-c. – Samich

Respuesta

3

como esto:

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

mirar hacia fuera para el paquete = 1, es bastante inusual. Y buenas probabilidades para CharSet.Ansi si esto interopera con el código C.

+0

Esto no funciona. Más tarde dirijo esta estructura a un puntero con Marshal.StructureToPtr (myAttributes, Ptr, false); Todos los otros campos están funcionando bien, excepto esta cadena. – Juergen

+2

No tengo idea de lo que podría significar "no funciona". Marshal.StructureToPtr no tiene problemas con una declaración como esta. Sea explícito sobre lo que ve que sale mal. Y tenga en cuenta mi comentario sobre CharSet. –