【问题标题】:VB.NET Invoke DLL method with ByRef ArgumentsVB.NET 使用 ByRef 参数调用 DLL 方法
【发布时间】:2009-04-03 14:01:47
【问题描述】:

使用 VB.NET,有没有办法在调用 dll 中的函数时传递引用参数。

假设我想将 arg2 作为参考参数传递,我该怎么做?


method.Invoke(obj, New [Object]() {arg1, arg2, arg3})

换句话说,我想将 arg2 指向被调用函数中的其他内容。

【问题讨论】:

    标签: vb.net dll reference arguments


    【解决方案1】:

    如果目标函数定义为ByRef,它将自动工作,否则 AFAIK 你不能。

    这样称呼它:

    method.invoke(obj, arg1, arg2, arg3)
    

    在您的情况下,您实际上发送了一个参数(一个对象数组)

    【讨论】:

    • 是的,目标函数参数是由ref定义的,但是不起作用。
    • 是的,我就是这么称呼它的。
    • OIC,你在说什么。我不相信这种类型的调用会过载。
    • 是的,ParamArrays 是非常有用的东西。因此,您可以向函数发送尽可能多的参数。
    【解决方案2】:

    是的,对象数组中的参数将保存在方法调用中设置的值。需要注意的一件事是,如果 arg1、arg2 和 arg3 是值类型(如 Int32),那么实际的 arg1 变量将不会被更新,因为它的值被复制到数组而不是它的引用中。

    要解决这个问题,请在函数调用之前创建对象数组,然后从数组中取出值。像这样

    Dim paramArray = New [Object]() {arg1, arg2, arg3}
    method.Invoke(obj, paramArray)
    arg1 = paramArray[0]
    arg2 = paramArray[1]
    arg3 = paramArray[2]
    

    【讨论】:

    • 我喜欢你在那里混合 VB 和 C# 的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-01-03
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多