¿Cómo Marshall como el tipo i8 con Pinvoke?
-
28-10-2019 - |
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?
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