国产探花免费观看_亚洲丰满少妇自慰呻吟_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],第三個參數是文本['']。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 当雄县| 三台县| 桃江县| 诸暨市| 罗江县| 静安区| 离岛区| 巴南区| 石屏县| 云林县| 泽库县| 醴陵市| 晋州市| 锡林郭勒盟| 图片| 林芝县| 皋兰县| 琼海市| 盐池县| 西吉县| 沂水县| 古交市| 陆川县| 精河县| 寿光市| 观塘区| 崇文区| 漳浦县| 罗源县| 大荔县| 长宁县| 启东市| 呼和浩特市| 五大连池市| 平远县| 石嘴山市| 包头市| 隆回县| 房产| 龙山县| 沙河市|