Доступ к скрытому динамическому свойству в COM-объекте с помощью C # - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно получить доступ к определенному свойству внутри COM-объекта (iTunes COM Library). Вы можете получить доступ к этому свойству с помощью динамического представления отладчика Visual Studio.

Visual Studio Dynamic Debug View

Я пытался получить это свойство с помощью Reflection, но я не получил никаких частных свойств или полей обратно.

Я могу получить доступ ко всем свойствам, которые я также вижу в отладчике, используя эту строку:

new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(myObject).Items

Однако я бы предпочел не использовать этот вызов, поскольку считаю, что существует более простое решение.

Если у вас установлен iTunes, это будет простой пример того, чего я пытаюсь достичь:

iTunesAppClass app;
if (Process.GetProcessesByName("iTunes").Any())
{
    app = new iTunesAppClass();
}
else
{
   return;
}

foreach (IITPlaylist playlist in app.LibrarySource.Playlists)
{
    // This does not work. There is no "Parent".
    //var parent = playlist.Parent;

    Type playListType = playlist.GetType();

    // both contain 0 results
    var fields = playListType.GetFields(BindingFlags.NonPublic);
    var properties = playListType.GetFields(BindingFlags.NonPublic);

    // works but only during runtime
    //var parent2 = new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(playlist).Items[4];
}
...