标题很长,但我希望它具体一些。标题确实是个问题。尽管该方法InvokeMember
正在呼叫有一个out
参数并正在为该参数分配一个值,但我无法获取该值。这是我最初使用的代码:
string parameter = "";
int result = Convert.ToInt32(typeof(Ability).InvokeMember(selectedMove, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object[] { parameter }));
我改变了它,现在使它按预期工作,但我不知道为什么:
object[] args = new object[1]; //necessary to retrieve ref/out parameter
int result = Convert.ToInt32(typeof(Ability).InvokeMember(selectedMove, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, args));
我只是想帮助那些正在与非托管(COM)斗争并获取引用参数的人(我就是这么做的)。因此,当针对 COM 方法使用 InvokeMember 时,您必须判断哪些参数是引用类型。这是通过使用 ParameterModifier 类来实现的,例如:
object[] args = new object[3] { param1, param2, errorStr };
ParameterModifier pMod = new ParameterModifier(3);
pMod[2] = true;
ParameterModifier[] mods = { pMod };
object tempObj = myCOMObject.GetType().InvokeMember("MyCOMMethod", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Public, null, myCOMObject, args, mods, null, null);
在上面的代码中,第三个参数设置为引用 (pMod[2] = true;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)