Come marshall come tipo i8 con pinvoke?
-
28-10-2019 - |
Domanda
Ho un valore UINT32 che voglio passare a una DLL esterna utilizzando interropservicie.
Il prototipo per il codice non gestito è:
[DllImport("svr.dll")]
public static extern UInt32 CreateTag (
[MarshalAs(UnmanagedType.LPStr)] String Name,
Object Value,
UInt16 InitialQuality,
bool IsWritable);
Il codice chiamante è:
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));
Voglio passare al valore dell'oggetto "myvalue" come tipo i8.
Come si può fare?
Soluzione
È necessario specificarlo nella dichiarazione dei parametri: [MarshalAs(UnmanagedType.I8)]
Altri suggerimenti
UnmanagedType è un enum, quindi puoi provare il metodo enum.parse:
string value = "9";
UnmanagedType i8 = (UnmanagedType)Enum.Parse(typeof(UnmanagedType), value);
Spero che questo sia utile per te.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow