Subscribing to events in external applications: Difference between revisions

From MediaMonkey Wiki
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
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
==Subscribing to events==
==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:
In MediaMonkey 4.0 and above (see [http://www.ventismedia.com/mantis/view.php?id=7920 bug tracking entry]), external applications can subscribe to MediaMonkey events in the same way as they register to other events.
* [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=29201&p=291459 Events don't work with C#]
 
* [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=45676&p=297214 Trouble With Handling COM Events]
 
In older versions however, subscribing to events does not work with external applications. See:
* [http://www.mediamonkey.com/forum/viewtopic.php?f=19&t=29201&p=291459 Events don't work with C#]
* [http://www.mediamonkey.com/forum/viewtopic.php?f=19&t=45676&p=297214 Trouble With Handling COM Events]
A solution is presented in:
A solution is presented in:
* [http://www.mediamonkey.com/forum/viewtopic.php?f=2&t=14004&hilit=com+events MonkeyToys: VB.NET extension adding MCE remote support]
* [http://www.mediamonkey.com/forum/viewtopic.php?f=2&t=14004&hilit=com+events MonkeyToys: VB.NET extension adding MCE remote support]
Line 46: Line 49:
</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]]

Latest revision as of 13:39, 25 June 2011

Subscribing to events

In MediaMonkey 4.0 and above (see bug tracking entry), external applications can subscribe to MediaMonkey events in the same way as they register to other events.


In older versions however, subscribing to events does not work with external applications. 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.