Pregunta

Tengo un valor UINT32 que quiero pasar a una DLL externa utilizando interpervicios.

El prototipo para el código no administrado es:

[DllImport("svr.dll")]
public static extern UInt32  CreateTag (
    [MarshalAs(UnmanagedType.LPStr)] String Name,
    Object Value,
    UInt16 InitialQuality,
    bool IsWritable);

El código de llamadas es:

int myValue = Convert.ToInt32(item); //How to marshal as I8 type
tagNumber = (UInt32)svr_DLL.CreateTag(
    DeviceName + "." + el.tagName,
    myValue, // <-- this argument
    192,
    Convert.ToBoolean(el.tagEditable));

Quiero pasar al valor del objeto "myValue" como tipo i8.

¿Cómo se puede hacer esto?

¿Fue útil?

Solución

Debe especificar eso en la declaración de parámetros: [MarshalAs(UnmanagedType.I8)]

Otros consejos

UnmanagedType es un enum, por lo que puede probar el método enum.parse:

string value = "9";
UnmanagedType i8 = (UnmanagedType)Enum.Parse(typeof(UnmanagedType), value);

Espero que esto sea útil para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top