欢迎光临
我们一直在努力

.NET中如何在调用COM时得到返回参数值-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

在调用com组件接口的时候,我们一般使用type.invokemember()的方法来调用。type.invokemember()在调用的时候需要接受一个object类型的数组来传递接口的参数信息。对于那些仅仅包含有[in]或byval的接口参数,你只要构建这样的数组,并把它传给type.invokemember()即可。

  如果com组件的接口参数含有[out]或者[in,out]返回参数(在vb开发的com组件里面是byref),那么,除了上面的做法之外,还得需要额外做一些工作。你必须得告诉type.invokemember()接口参数里面哪些参数是一个[in][in,out]或byref的参数,否则,你将得不到任何的返回参数值。为了得到[in][in,out]或byref返回参数的值,你得用到包含有parametermodifier数组的type.invokemember()重载方法。

  parametermodifier数组中仅仅需要包含一个元素,parametermodifier对象有一个调用参数的索引属性叫做item。在调用接口中,如果第n个参数是一个引用的参数,那么,第n个item属性必须要赋值为true来告诉type.invokemember()这是一个引用的参数。

  下面是一个调用包含有三个参数(其中两个参数为引用参数)一个com的接口c#例子,在这个例子中,第二个参数和第三个参数都是引用的参数:

type comobjtype;
object comobj;
string returnvalue;

//创建com对象的引用
comobjtype = type.gettypefromprogid(“somecomserver.somecomobject”);
comobj = activator.createinstance(comobjtype);

//为invokemethod 的调用构建参数数组,并初始化每个参数元素
object[] paramarray = new object[3];
paramarray [0] = “inparam” ;
paramarray[1] = 5 ;
paramarray[2] = “” ;
//构建parametermodifier数组(注意上面所说的parametermodifier数组里面只有一个元素)
//这里有三个参数。所以在创建parametermodifier对象的时候要在其构造函数里面指出参数的个数
//用参数的索引属性来指出哪些参数是一个返回的参数
//对于那些是[in]或byref的参数可以不用指定
parametermodifier[] parammods = new parametermodifier [1];
parammods[0] = new parametermodifier (3); // 初始化为接口参数的个数
parammods[0][1] = true; // 设置第二个参数为返回参数
parammods[0][2] = true; // 设置第三个参数为返回参数
//调用含有parametermodifier数组的重载函数
returnvalue = (string) comobjtype.invokemember(“returnsomevalues”, // 接口函数名
 bindingflags.default | bindingflags.invokemethod,
 null,
 comobj, // 调用的com组件
 paramarray, // 参数数组
 parammods, // 指定返回参数的parametermodifier数组
 null,
 null) ;

//显示参数的值
console.writeline (“param1 = {0}”, paramarray[0]) ;
console.writeline (“param2 = {0}”, paramarray[1]) ;
console.writeline (“param3 = {0}”, paramarray[2]) ;
console.writeline (“return value = {0}”, returnvalue ) ; 

  注意,为了给invokemethod()传递正确的parametermodifier数组,你必须在接受返回的参数数组中初始化参数的数据类型。在上面的例子中,第二个参数是整形[5],第三个参数是文本[]。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » .NET中如何在调用COM时得到返回参数值-.NET教程,Asp.Net开发
分享到: 更多 (0)