/// <summary>VB_COM呼び出し</summary> private void Button1_Click(object sender, RoutedEventArgs e) { short ret = 0; string str1 = ""; short i1 = 0; string str2 = ""; short i2 = 0; str1 = "test1,"; i1 = 1; str2 = "test2,"; i2 = 2; // レイトバインド用 object[] args; ParameterModifier p; ParameterModifier[] mods = null; try { //object o = CreateObject("VB_COM.ClassTest");// レイトバインド VB_COM.ClassTest c = new VB_COM.ClassTest();// アーリーバインド //正常終了 //// レイトバインド@リフレクションで参照渡しを行う。 //// ParameterModifierを使用してCOMパラメータに修飾子を指定 //args = new object[4] { str1, i1, str2, i2 }; //p = new ParameterModifier(4); //p[0] = false; //p[1] = false; //p[2] = true; //p[3] = true; //mods = new ParameterModifier[] { p }; //try //{ // ret = (short)o.GetType().InvokeMember("MethodTest", BindingFlags.InvokeMethod, null, // o, args, mods, null, null);// レイトバインド //} //catch (Exception ex) //{ // throw ex.InnerException; //} //str1 = (string)args[0]; //i1 = (short)args[1]; //str2 = (string)args[2]; //i2 = (short)args[3]; ret = c.MethodTest(str1, i1, ref str2, ref i2);// アーリーバインド //MessageBox MessageBox.Show("ret:" + ret + "\r\n" + "str1:" + str1 + "\r\n" + "i1:" + i1.ToString() + "\r\n" + "str2:" + str2 + "\r\n" + "i2:" + i2.ToString(), "結果", MessageBoxButton.OK); //異常終了(catchコード ブロックへ) //// レイトバインド@リフレクションで参照渡しを行う。 //// ParameterModifierを使用してCOMパラメータに修飾子を指定 //args = new object[4] { "", i1, str2, i2 }; //p = new ParameterModifier(4); //p[0] = false; //p[1] = false; //p[2] = true; //p[3] = true; //mods = new ParameterModifier[] { p }; //try //{ // ret = (short)o.GetType().InvokeMember("MethodTest", BindingFlags.InvokeMethod, null, // o, args, mods, null, null);// レイトバインド //} //catch (Exception ex) //{ // throw ex.InnerException; //} //str1 = (string)args[0]; //i1 = (short)args[1]; //str2 = (string)args[2]; //i2 = (short)args[3]; ret = c.MethodTest("", i1, ref str2, ref i2); //MessageBox MessageBox.Show("ret:" + ret + "\r\n" + "str1:" + str1 + "\r\n" + "i1:" + i1.ToString() + "\r\n" + "str2:" + str2 + "\r\n" + "i2:" + i2.ToString(), "結果", MessageBoxButton.OK); } catch (COMException ex) { //MessageBox MessageBox.Show( "Err.Number:" + ex.ErrorCode + "\r\n" + "Err.Description:" + ex.Message, "例外", MessageBoxButton.OK); } }