Announcement

Collapse
No announcement yet.

Probleme mit Interoperbilität (Excel-C#)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit Interoperbilität (Excel-C#)

    Hi zusammen,

    ich versuche schon seit längerer Zeit, ein Original Code-Beispiel von MS umzusetzen, das einen Zugriff aus COM (ExcelApp) auf .net demonstrieren soll. Benutzte Version ist VS / C#2005 - und es funktioniert ums verrecken nicht, weil Excel beim Versuch, das Teil als Addin einzufügen, später stets behauptet, das Ding nicht gefunden zu haben. Was ist falsch an dem Code, den ich nachf. aufführe:
    ________________________________________

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;


    namespace Test
    {

    public class ExcelAddIn
    {
    public static double Tax(double income)
    {
    if (income > 0 && income <= 7000) { return (.10 * income); }
    if (income > 7000 && income <= 28400) { return 700.00 + (.15 * (income - 7000)); }
    if (income > 28400 && income <= 68800) { return 3910.00 + (.25 * (income - 28400)); }
    if (income > 68800 && income <= 143500) { return 14010.00 + (.28 * (income - 68800)); }
    if (income > 143500 && income <= 311950) { return 34926.00 + (.33 * (income - 143500)); }
    if (income > 311950) { return 90514.50 + (.35 * (income - 311950)); }
    return 0;
    }
    [ComRegisterFunctionAttribute]
    public static void RegisterFunction(System.Type t)
    {
    Microsoft.Win32.Registry.ClassesRoot.CreateSubKey
    ("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(System.Type t)
    {
    Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey
    ("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }

    }
    }

    ___________________________

  • #2
    Wie jetzt, für Add-Ins benutzt man eigentlich nciht die COM Schnittstelle, das wäre... ungeschickt. Ein Addin läuft ja innerhalb von Excel, deshalb braucht man da gar kein COM. Wäre mir sehr suspekt, wenn das tatsächlich so sein sollte.
    Just be DRY and KISS your customers.

    Comment


    • #3
      Du hast die Assembly bzw. die Klasse auf ComVisible = true gesetzt?
      Du hast die Assembly mit dem Regasm Tool auch registriert?

      Ein Addin läuft ja innerhalb von Excel, deshalb braucht man da gar kein COM. Wäre mir sehr suspekt, wenn das tatsächlich so sein sollte.
      Ist aber so, die AddIn Schnittstelle von MS Office ist eine COM Schnittstelle.
      Ich fände es im Gegensatz zu dir Suspekt wenn managed Code in einem unmanaged Prozess ohne irgendeinen Wrapper (wie z.B. COM) laufen würde.

      Comment


      • #4
        Alles nach Vorschrift

        Hi,

        & erstmal Danke für Eure Antworten. Ja, ich habe alles exakt so gemacht,

        > Du hast die Assembly bzw. die Klasse auf ComVisible = true gesetzt?
        > Du hast die Assembly mit dem Regasm Tool auch registriert?

        wies in der Beschreibung dieses Beispiels steht. Deshalb bin ich ja so ratlos - &
        Interessanterweise gibts im MSDN auch noch andere Beispiele, die sich der Schnittstelle IDispatch bedienen und wieder ganz anders codiert sind. Aber trotzdem - auch in MSDN 2008 steht das og. Teil noch genauso drin & wird als lauffähiges Beispiel angepriesen...

        Gruß und Danke

        HH

        Comment

        Working...
        X