/// <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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }