Comment marshall comme le type I8 avec PInvoke?
-
28-10-2019 - |
Question
J'ai une valeur UInt32 que je souhaite transmettre à une DLL externe à l'aide d'InterOpServices.
Le prototype du code non managé est:
[DllImport("svr.dll")]
public static extern UInt32 CreateTag (
[MarshalAs(UnmanagedType.LPStr)] String Name,
Object Value,
UInt16 InitialQuality,
bool IsWritable);
Le code d'appel est:
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));
Je veux passer à la valeur d'objet "myValue" comme type I8.
Comment cela peut-il être fait?
La solution
Vous devez le spécifier dans la déclaration du paramètre: [MarshalAs(UnmanagedType.I8)]
Autres conseils
UnmanagedType est une énumération, vous pouvez donc essayer la méthode Enum.Parse:
string value = "9";
UnmanagedType i8 = (UnmanagedType)Enum.Parse(typeof(UnmanagedType), value);
J'espère que cela vous sera utile.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow