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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 17:56:34
字體:
來源:轉載
供稿:網友

  在調用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.GetTypeFromComObj = 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],第三個參數是文本['']。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 楚雄市| 东兰县| 廉江市| 车致| 鄂托克旗| 安吉县| 清苑县| 开原市| 塘沽区| 桂林市| 左权县| 永川市| 仁布县| 台州市| 临颍县| 德昌县| 沂源县| 石楼县| 海林市| 伽师县| 治县。| 山丹县| 秭归县| 准格尔旗| 马山县| 策勒县| 邹城市| 卢氏县| 昌邑市| 桐柏县| 望都县| 绥棱县| 常山县| 沿河| 礼泉县| 屏山县| 友谊县| 武威市| 平谷区| 平原县| 怀集县|