如何使用 PInvoke 编组为 I8 类型?

发布于 2025-01-07 13:43:57 字数 595 浏览 0 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天生の放荡 2025-01-14 13:43:57

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

You need to specify that on the parameter declaration: [MarshalAs(UnmanagedType.I8)]

娇俏 2025-01-14 13:43:57

UnmanagedType 是一个枚举,因此您可以尝试 Enum.Parse 方法:

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

希望这对您有帮助。

UnmanagedType is a enum, so you can try Enum.Parse method:

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

Hope this helpful to you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文