如何使用 PInvoke 编组为 I8 类型?
我有一个 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 类型传递。
这怎么能做到呢?
I have a UInt32 value I want to pass to an external dll using InterOpServices.
The prototype for the unmanaged code is:
[DllImport("svr.dll")]
public static extern UInt32 CreateTag (
[MarshalAs(UnmanagedType.LPStr)] String Name,
Object Value,
UInt16 InitialQuality,
bool IsWritable);
The calling code is:
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));
I want to pass to the Object Value "myValue" as I8 type.
How can this be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要在参数声明中指定:
[MarshalAs(UnmanagedType.I8)]
You need to specify that on the parameter declaration:
[MarshalAs(UnmanagedType.I8)]
UnmanagedType 是一个枚举,因此您可以尝试 Enum.Parse 方法:
希望这对您有帮助。
UnmanagedType is a enum, so you can try Enum.Parse method:
Hope this helpful to you.