Subscribing to events in external applications: Difference between revisions
Jump to navigation
Jump to search
(Created page with "==Subscribing to events== Subscribing to events does not work with external applications, like .NET applications if they make the connection to the MediaMonkey application. See: ...") |
No edit summary |
||
Line 46: | Line 46: | ||
</source> | </source> | ||
* When you now start MediaMonkey it will connect to your application and event firing will work. | * When you now start MediaMonkey it will connect to your application and event firing will work. | ||
[[Category:.NET]] |
Revision as of 18:01, 29 May 2011
Subscribing to events
Subscribing to events does not work with external applications, like .NET applications if they make the connection to the MediaMonkey application. See:
A solution is presented in:
Walkthrough
This solution is based on making your assembly ComVisible, registering it and letting an auto-script in MediaMonkey create your application object. This can be accomplished by creating a class along the lines under.
- First build and run your program, then call the RegisterCOM() Method to register your application with COM.
(continued after C#-code)
using System.Reflection;
using System.Runtime.InteropServices;
using SongsDB;
namespace SomeNamespace {
[ComVisible(true)] // this overrides [assembly: ComVisible(false)] (is set by project options dialog) so registry don't get bloated with unneeded types
public class EventTest {
public SDBApplication SDB { get; private set; }
public static void RegisterCOM() {
RegistrationServices rs = new RegistrationServices();
rs.RegisterAssembly(Assembly.GetExecutingAssembly(),
AssemblyRegistrationFlags.SetCodeBase);
}
public static void UnRegisterCOM() {
RegistrationServices rs = new RegistrationServices();
rs.UnregisterAssembly(Assembly.GetExecutingAssembly());
}
public void Init(SDBApplication mm) {
this.SDB = mm;
this.SDB.set_Objects(Assembly.GetExecutingAssembly().GetName().Name, this);
this.SDB.OnPlay += () => { System.Windows.MessageBox.Show("OnPlay event fired!"); };
}
}
}
- Add an autoscript-to mediamonkey (ie. a file in ...\MediaMonkey\Scripts\Auto) named SomeScript.vbs that starts your application and runs the Init function. It's contents should be like this:
Sub OnStartup
Set o = CreateObject("SomeNamespace.EventTest")
o.Init(SDB)
End Sub
- When you now start MediaMonkey it will connect to your application and event firing will work.