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 }); } } } }
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 } }