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() { ... }
}
}