国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET中如何在調用COM時得到返回參數值

2024-07-10 13:03:46
字體:
來源:轉載
供稿:網友

    在調用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],第三個參數是文本['']。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆德县| 成都市| 商河县| 平凉市| 买车| 南部县| 武强县| 日土县| 泸水县| 贵州省| 鄂州市| 封丘县| 当涂县| 沈阳市| 朝阳区| 岑溪市| 勃利县| 柳林县| 肥东县| 台南市| 汤原县| 海南省| 清徐县| 五家渠市| 玛纳斯县| 岫岩| 绵竹市| 闽侯县| 内江市| 亚东县| 巍山| 凉山| 高青县| 晋中市| 抚顺市| 合阳县| 宣恩县| 台安县| 孝感市| 普定县| 平和县|