Beispiel #1
0
        /// <summary>
        /// 어셈블리 파일 처리
        /// </summary>
        /// <param name="path">dll file 경로</param>
        private void LoadAssembly(string path)
        {
            Assembly assem;

            Type[] types;

            // Assembly 파일 로드
            try
            {
                assem = Assembly.LoadFrom(path);
                if (assem == null)
                {
                    throw new Exception("DLL 로드에 실패 했습니다. 지정되지 않은 오류.");
                }
            }
            catch (Exception ex)
            {
                ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod());
                form.ShowDialog();
                return;
            }

            // 등록된 Class 목록 가져오기
            try
            {
                types = assem.GetTypes();
            }
            catch (ReflectionTypeLoadException ex)
            {
                // 클래스를 로드할 수 없을 경우
                ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod());
                form.ShowDialog();
                return;
            }

            // 항목 콤보박스에 담기
            _dtClass.Clear();

            foreach (Type type in types)
            {
                // UserControl, Form 만 처리함 그외는 무시
                if (type.BaseType == null)
                {
                    continue;
                }

                _dtClass.Rows.Add(new object[] { type.FullName, string.Format("({0}) {1}", type.BaseType.Name, type.Name) });
            }

            // 선택 DLL 정보 셋팅
            txtDllPath.Text        = path;
            _assemblyHandler.Assem = assem;
        }
Beispiel #2
0
        /// <summary>
        /// 파일 오픈
        /// </summary>
        private void OpenControl()
        {
            object   control;
            Assembly assem;
            Type     classType;

            if (!_assemblyHandler.GetAssemblyType(out assem, out classType))
            {
                return;
            }

            // 컨트롤 조회
            try
            {
                // 파라미터 값 조회
                object[] args = GetArgs();

                // 불러오기
                control = assem.CreateInstance(
                    classType.FullName,
                    true,
                    BindingFlags.CreateInstance,
                    null,
                    args,
                    null,
                    null);

                // 값이 없을 경우
                if (control == null)
                {
                    throw new Exception("컨트롤 조회 결과 값이 없습니다.");
                }
            }
            catch (Exception ex)
            {
                ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod());
                form.ShowDialog();
                return;
            }

            // 컨트롤 탭 불러오기
            SetTabPage(assem, classType, control);
        }
Beispiel #3
0
        /// <summary>
        /// 생성자 리스트 셋팅
        /// </summary>
        private void SetConstructorList()
        {
            string   classFullName = lueClass.EditValue.ToString();
            Type     classType;
            Assembly assem;

            txtClassName.Text = classFullName;

            if (!_assemblyHandler.GetAssemblyType(out assem))
            {
                return;
            }

            // Assembly 안에 Class 를 추출함
            try
            {
                classType = assem.GetType(classFullName);
            }
            catch (Exception ex)
            {
                ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod());
                form.ShowDialog();
                return;
            }

            // 추출한 클래스를 Tag에 담음
            _assemblyHandler.SelectionType = classType;

            // 기존 항목 초기화
            _dtConstruct.Clear();

            // 생성자 리스트 셋팅
            foreach (ConstructorInfo constructorInfo in classType.GetConstructors())
            {
                StringBuilder param       = new StringBuilder();
                string        paramString = string.Empty;

                // 파라미터 셋팅
                foreach (ParameterInfo parameterInfo in constructorInfo.GetParameters())
                {
                    if (parameterInfo.Position != 0)
                    {
                        param.Append("|");
                    }
                    param.AppendFormat("{0} ({1})", parameterInfo.Name, parameterInfo.ParameterType.Name);
                }

                if (param.ToString().Length == 0)
                {
                    paramString = "(기본 빈 생성자)";
                }
                else
                {
                    paramString = param.ToString();
                }

                _dtConstruct.Rows.Add(new object[] { constructorInfo.ToString(), paramString, constructorInfo });
            }

            // 최초 빈값 셋팅
            lueConstruct.ItemIndex = 0;
        }