Как полностью использовать компоненты COM в ядре 3.1 - PullRequest
0 голосов
/ 20 февраля 2020

Я использую Dynami c для доступа к COM-компонентам в ядре 3.1, и это не работает.

Попробуйте с Небольшая оболочка для COM-взаимодействия , это почти нормально, кроме индекса свойство, такое как var sheet = wb.Sheets[1]; Мне пришлось переопределить функцию TryGetIndex. Поэтому я должен получить тип comobject с COM-объектами Reflection-with-IDispatch-based , но он не работает в ядре 3.1:

System.MissingMethodException:“Method not found: 'System.Type System.Runtime.InteropServices.Marshal.GetTypeForITypeInfo(IntPtr)'.”

И

C: \ Windows \ Microsoft.NET \ сборка \ GAC_64 \ CustomMarshalers \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ CustomMarshalers.dll

1014 *C: \ Windows \ WinSxS \ amd64_custommarshalers_b03f5f7f11d50a3a_10.0.17134.1_none_e788457a14459849 \ CustomMarshalers.dll

был опробован.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 17 марта 2020

Решено на основе ответа Сайруса Наймабади

public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
{
    result = WrapIfRequired(
        _instance.GetType()
            .InvokeMember(
                "Item",
                BindingFlags.GetProperty,
                Type.DefaultBinder,
                _instance,
                indexes
            ));
    return true;
}

Работает! Спасибо!

...