Wir haben ein VSTO-Addin für Excel entwickelt, dass die Anmeldung an die Datenbank und Verwaltung der Benutzerdaten (Passwort ändern / neu anfordern) durchführt.Wir planen jetzt diese Oracle-Connection anderen VST0 / VBA -Projekten zur Verfügung zu stellen.
Dazu habe ich das Pattern AddinUtilities : IAddInUtilities genutzt.
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IAddInUtilities
{
Oracle.ManagedDataAccess.Client.OracleConnection DataBaseConnection();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddinUtilities : IAddInUtilities
{
public Oracle.ManagedDataAccess.Client.OracleConnection DataBaseConnection()
{
return ThisAddIn.ReBase.UserConnection;
}
}
Rufe ich in einem anderen AddIn-Projekt die Methode DataBaseConnection(), erhalte ich folgende Ausnahme:
//System.InvalidOperationException was unhandled by user code
//HResult=-2146233079
//Message=This type has a ComVisible(false) parent in its hierarchy, therefore QueryInterface calls for IDispatch or class interfaces are disallowed.
//Source=mscorlib
//StackTrace:
// at System.StubHelpers.InterfaceMarshaler.ConvertToNative(Object objSrc, IntPtr itfMT, IntPtr classMT, Int32 flags)
// at ReWareExcel.IAddInUtilities.DataBaseConnection()
// at TestAddInUitilitiesExcel.UsingReWareAddin.DatabaseConnection() in C:\Data\Visual Studio 2010\Projects\TestAddInUitilitiesExcel\TestAddInUitilitiesExcel\UsingReWareAddin.cs:line 39
// at TestAddInUitilitiesExcel.Ribbon1.Button1Click(Object sender, RibbonControlEventArgs e) in C:\Data\Visual Studio 2010\Projects\TestAddInUitilitiesExcel\TestAddInUitilitiesExcel\Ribbon1.cs:line 45
// at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control)
// at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args)
// at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args)
// at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
// at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture,
String[] namedParameters)
//InnerException:
Datenbank-Treiber: Oracle.ManagedDataAccess.dll Version 4.121.2.0
Gibt es einen Weg diese Ausnahme zu vermeiden?
Vielen Dank im Voraus
Holger