COM Callable Wrapper работает в.NET 2.0, но не.NET 4.0

Я написал проверочную концепцию COM Callable Wrapper, чтобы заменить существующий компонент COM новыми функциями. Ограничением моего проекта является то, что я не могу изменить вызывающий код; вызывающий код должен не знать о наличии вызываемой оболочки COM. Небольшое решение для проверки концепции, которое я создал, работает, если вызывающий код является.NET 2.0, но завершается с ошибкой InvalidCastException, если вызывающий код находится в.NET 4.0. Может кто-нибудь помочь мне выяснить причину этого.NET 4.0 InvalidCastException?

COM Callable Wrapper:

using System.EnterpriseServices;
using System.Runtime.InteropServices;

namespace DNNXPOC.CCWTestA
{
    [ComVisible(true)]
    [Guid("39D50FA3-DF73-4A3B-A4F8-4D21F5A27E83")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ItestA
    {
        [DispId(1)]
        int process();
    }

    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    [Guid("1A6ECD84-5147-4EF8-89A4-0F9AC5F3915B")]
    [ProgId("NNXPOC.testA")]
    [ComDefaultInterface(typeof(ItestA))]
    public class testA : ServicedComponent, ItestA
    {
        public int process()
        {
            const int result = 3;
            return result;
        }
    }
}

Телефонный код (за исключением броска на new линия):

using System;
using System.Runtime.InteropServices;
using NNXPOCLib;

namespace DNNXPOC
{
    public class TestAAccessWrapper : IDisposable
    {
        private ItestA _testA;
        private bool _isDisposed;

        public TestAAccessWrapper()
        {
            _testA = new testAClass();
        }

        public ItestA testA { ... }

        public void Dispose() { ... }
    }
}

0 ответов

Другие вопросы по тегам