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?

È stato utile?

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
scroll top