2012-02-20 58 views
2

我有一个UInt32值,我想传递给使用InterOpServices的外部DLL。如何使用PInvoke编组I8类型?

的原型非托管代码是:

[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类型。

这怎么办?

回答

6

你需要指定的参数声明:[MarshalAs(UnmanagedType.I8)]

1

UnmanagedType是一个枚举,所以你可以尝试Enum.Parse方法:

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

希望这对您有所帮助。