Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用by ref参数按名称调用vb.net函数_Vb.net_Invoke_Dynamically Generated - Fatal编程技术网

如何使用by ref参数按名称调用vb.net函数

如何使用by ref参数按名称调用vb.net函数,vb.net,invoke,dynamically-generated,Vb.net,Invoke,Dynamically Generated,我们需要按名称编程调用一组函数(目前大约30个)。它们都有相同的签名,所以我选择了“调用”路线。我最初尝试使用代理,正如我之前回忆的那样,但这并没有达到我想要的效果。所以我现在看了反射来做这件事 Dim webapiType as type = type.gettype("fully.qualified.model.webapi", true, true) dim webAPIConstructor as system.reflection.constructorinfo = webap

我们需要按名称编程调用一组函数(目前大约30个)。它们都有相同的签名,所以我选择了“调用”路线。我最初尝试使用代理,正如我之前回忆的那样,但这并没有达到我想要的效果。所以我现在看了反射来做这件事

    Dim webapiType as type = type.gettype("fully.qualified.model.webapi", true, true)
dim webAPIConstructor as system.reflection.constructorinfo = webapitype.getconstructor(type.emptytypes)
dim webapiClassObject as object = webapiConstructor.invoke(new object(){})
dim webapiMethod as system.reflection.methodinfo = webapitype.getmethod("myFunctionName")
dim webapiValue as object = webapimethod.invoke(webapiclassobject, new object(){model, xmlREsponse, msg, exDAL})
这一切都可以正常工作,并调用我的函数“myFunctionName”,但它没有设置xmlResponse对象值,该值保持为nothing。(我调用的函数有byval模型、byref xmlREsponse、byref msg和byref exDal)

如果我直接调用该方法而不是调用它,则返回xmlResponse参数

所以问题是byRef值的值没有被返回

是否有其他方法调用该方法以便正确返回ByRef参数,或者我是否需要研究其他概念


(我查看了CalledName,文档中说它只通过“ByVal”,所以没有用)

我知道你说你已经尝试过委托人了……但请告诉我们为什么不起作用。为什么不能使用委托?我可以创建一个委托并传递信息(返回值),但无法通过编程将委托定义为指向的地址。dim delegateObject as delegateForWebAPICall=AddressOf c.myFunctionName我想将deletegate对象指向“myFunctionName”的地址,这样我就可以将名称作为字符串传递,而不是硬编码。为什么需要将名称作为字符串传递?这些字符串名来自哪里?您有许多具体的方法,为什么不在需要时创建一个委托呢?请参阅。看起来,如果方法签名接受一个特定的参数by ref,那么当您调用
Invoke()
时,它将被推断为by ref,我们正在将无法更改的东西添加到现有的体系结构中。但是我已经解决了这个问题。我没有添加值“in-line”new object(){model,xmlREsponse,msg,exDAL},而是将dim params创建为object()=new object(){model,xmlREsponse,msg,exDAL},然后将其作为invoke(webapiClassObject,params)传入,然后该值将被维护,但仅在params数组中,而不是添加到数组中的对象。我想这是有道理的。另一个将委托传递给函数的选项是,我可能会逐个进行研究。