在我的计算机上运行的多个程序需要访问COM对象提供的iTunesApp界面。经过一些测试后,我发现某些互动(特别是事件收听)只能在"原创"对象的实例。这意味着如果iTunes已经运行并且我运行iTunesApp app = new iTunesApp()
我创建了一个可以访问库并播放/暂停等的iTunesApp实例,但是当app.OnPlayerPlayEvent
之类的事件被触发时,它不会被调用。如果我想要事件监听,我必须在iTunes尚未运行的情况下运行iTunesApp app = new iTunesApp()
。
所以我的解决方案就是我只有一个程序在启动时运行,启动iTunes并与任何其他需要它的程序共享iTunesApp
对象。不幸的是,该类不具有可串行性,因此我无法将其轻松转换为byte []数组。
我的问题是:是否有可能将对象转换为字节数组并通过MemoryMappedFile
,Socket
或类似方式共享?我已尝试BinaryFormatter.Serialize()
以及ProtoBuf
包,但都没有效果。或者是否有方法或某些东西允许我从正在运行的iTunes实例中获取iTunesApp
对象?
答案 0 :(得分:0)
COM有一种标准的编组对象的方法。调用CoMarshalInterface将对象编组为流(对于C#声明,请参阅CoMarshalInterface on pinvoke.net)。然后,您可以读取写入IStream的字节,将这些字节提供给任何进程,使用CoUnmarshalInterface解组。确保为用例使用正确的标志。