如何使用PInvoke编组为I8类型

本文关键字:I8 类型 何使用 PInvoke | 更新日期: 2023-09-27 18:25:16

我有一个UInt32值,要使用InterOpServices传递到外部dll。

非托管代码的原型是:

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

调用代码为:

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));

我想将对象值"myValue"作为I8类型传递给它。

如何做到这一点?

如何使用PInvoke编组为I8类型

您需要在参数声明中指定:[MarshalAs(UnmanagedType.I8)]

UnmanagedType是一个枚举,所以您可以尝试enum。解析方法:

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

希望这对你有帮助。