Beispiel #1
0
        private void buttonShowCfg_Click(object sender, EventArgs e)
        {
            if (comboBoxAvailableEmr.SelectedItem != null)
            {
                SEmrInfo selectedEmr        = (SEmrInfo)comboBoxAvailableEmr.SelectedItem;
                Assembly startValueAssembly = Assembly.LoadFrom(System.IO.Path.Combine(GetEmrPlugInFolder(), selectedEmr.FileName));

                Type plugInType = GetEmrType(startValueAssembly);

                if (plugInType == null)
                {
                    return;
                }

                PropertyInfo propConfigControl = plugInType.GetProperty(ndd.EMR.SharedConst.PlugInNaming.EmrInterface_CfgCtrl);

                if (propConfigControl != null)
                {
                    Control controlCfg = propConfigControl.GetValue(propConfigControl, BindingFlags.GetProperty, null, null, CultureInfo.CurrentCulture) as Control;
                    if (controlCfg != null)
                    {
                        //remove previous controls
                        while (panelCfgHolder.Controls.Count > 0)
                        {
                            panelCfgHolder.Controls.RemoveAt(0);
                        }

                        panelCfgHolder.Controls.Add(controlCfg);

                        //load values
                        MethodInfo methodGetGuiValues = controlCfg.GetType().GetMethod(ndd.EMR.SharedConst.PlugInNaming.EmrCfgCtrlInterface_SetGuiValues);
                        if (methodGetGuiValues == null)
                        {
                            return;
                        }

                        if (_ConfigValues == null)
                        {
                            _ConfigValues = new Dictionary <string, string>();
                        }

                        methodGetGuiValues.Invoke(controlCfg, new object[1] {
                            _ConfigValues
                        });
                    }
                }
            }
        }
Beispiel #2
0
        private void buttonInit_Click(object sender, EventArgs e)
        {
            if (comboBoxAvailableEmr.SelectedItem != null)
            {
                if (_LoadedEmr != null)
                {
                    if (_CloseMethod != null)
                    {
                        _CloseMethod.Invoke(_LoadedEmr, BindingFlags.InvokeMethod, null, null, null);
                    }

                    _LoadedEmr        = null;
                    _CloseMethod      = null;
                    _ReceiveMsgMethod = null;
                }

                SEmrInfo selectedEmr         = (SEmrInfo)comboBoxAvailableEmr.SelectedItem;
                string   strAssemblyFileName = System.IO.Path.Combine(GetEmrPlugInFolder(), selectedEmr.FileName);
                Assembly startValueAssembly  = Assembly.LoadFrom(strAssemblyFileName); //LoadFile does not work for inherited projects (can't find base dll when not in same folder as EasyWarePro)

                Type plugInType = GetEmrType(startValueAssembly);
                if (plugInType == null)
                {
                    return;
                }

                ConstructorInfo emrConstructor = plugInType.GetConstructor(new Type[0]);
                if (emrConstructor == null)
                {
                    return;
                }

                object emrModul = emrConstructor.Invoke(new object[0]);
                if (emrModul == null)
                {
                    return;
                }


                _LoadedEmr = emrModul;

                #region - SendXmlCallback -
                PropertyInfo callbackSendXmlPropInfo = plugInType.GetProperty(ndd.EMR.SharedConst.PlugInNaming.EmrInterface_SendXmlCallback);
                Type         delegateType            = callbackSendXmlPropInfo.PropertyType;

                // If you already have a method with the correct signature,
                // you can simply get a MethodInfo for it.

                //following code is replaced with: onEmrSendMessageEvent.Method
                //MethodInfo miHandlerSendMsg =
                //    typeof(Form1).GetMethod("OnEmrSendMessage");
                OnEmrSendMessageDelegate onEmrSendMessageEvent = this.OnEmrSendMessage;

                //Code von http://msdn.microsoft.com/en-us/library/ms228976.aspx

                // Create an instance of the delegate. Using the overloads
                // of CreateDelegate that take MethodInfo is recommended.
                //
                Delegate dSendMsg = Delegate.CreateDelegate(delegateType, this, onEmrSendMessageEvent.Method);

                callbackSendXmlPropInfo.SetValue(emrModul, dSendMsg, null);
                #endregion

                //load method
                _ReceiveMsgMethod = plugInType.GetMethod(ndd.EMR.SharedConst.PlugInNaming.EmrInterface_ReceiveXmlMessage);

                //close method
                _CloseMethod = plugInType.GetMethod(ndd.EMR.SharedConst.PlugInNaming.EmrInterface_Close);

                #region - call method Initialize -

                MethodInfo methodInit = plugInType.GetMethod("Initialize");
                if (methodInit == null)
                {
                    return;
                }

                if (_ConfigValues == null)
                {
                    _ConfigValues = new Dictionary <string, string>();
                }
                object[] attr   = new object[] { _ConfigValues };
                bool     result = (bool)methodInit.Invoke(emrModul, attr);

                if (!result)
                {
                    return;
                }
                #endregion
            }
        }