none
com addin in word wird fehlerhaft angezeigt RRS feed

  • Frage

  • hallo miteinander,
    ich bin gerade dabei mich in die com addin geschichte einzuarbeiten. Dazu habe ich das beispiel für das office 2000(comaddin.exe). beim ersten versuch ging alles wunderbar. nach erneutem starten des Word's stellt ich fest das auf einmal nicht nur ein button sondern zwei da waren. nach einem erneuten starten waren es dann schon drei. gerade habe ich das ganze in excel getestet und da geht es bleibt immer der eine.
    leider finde ich keine lösung im internet. kann mir einer sagen was ich machen muss damit das addin in word richtig funktioniert. Ich habe office 2007.
    Montag, 21. September 2009 08:37

Antworten

Alle Antworten

  • Hallo Tiran1984,

    hast du zum Schluß drei Word-Dokumente gleichzeitig geöffnet gehabt? Oder hast du Word geöffnet, dann komplett (alle Dokumente bzw. Instanzen) geschlossen und dann wieder neu geöffnet?

    Gruß
    Jan
    Dienstag, 22. September 2009 10:32
  • Also ich habe das Word immer komplett geschlossen. und dann wieder aus dem Visual studio gestartet, wobei das keine rolle spielt.

    Danke für die Hilfe

    Dienstag, 22. September 2009 10:48
  • Hallo Tiran1984,

    nun es spielt insofern eine Rolle, als dass Word eine SDI- und Excel eine MDI-Anwendung ist. In Word hat also jedes Dokument ein eigenes Anwendungsfenster und in Excel teilen sich mehrere Dokumente ein gemeinsames Anwendungsfenster (auch wenn dies nicht den Anschein hat). Bei der Entwicklung von Add-Ins muss dieses Verhalten berücksichtigt werden, da das Ergebnis sonst unterschiedlich sein kann. Dafür gibt es die entsprechenden Ereignisse, die beim Schließen und Öffnen eines Dokuments bzw. beim Schließen und Öffnen der Anwendung ausgelöst werden. Je nach gewünschtem Verhalten, muss man also die Ereignisse des Dokuments oder eben der Anwendung behandeln. Daher kann ein Add-In in Word ein anderes Verhalten als in Excel aufweisen.

    SDI-Anwendungen: Outlook, Word
    MDI-Anwendungen: Excel, PowerPoint

    Kannst du dein Problem unter Berücksichtigung der verschiedenen Anwendungsverhalten lösen?

    Viele Grüße
    Jan
    Dienstag, 22. September 2009 11:45
  • Hallo Jan

    also das ist mir schonmal eine gute Hilfe mit dem SDI und MDI aber leider hab ich jetzt noch nichts gefunden was ich beim SDI anders machen muss gegenüber dem MDI. Worauf muss ich achten? Muss ich das ganze entfernen der Buttons beim OnDisconnection machen oder wo anders?

    Vielen Dank

    Michael
    Dienstag, 22. September 2009 13:15
  • mir ist gerade noch aufgefallen das die symbole(buttons) in einer benutzerdefinierten Menuleiste stecken. und da kann ich die alten alle wieder von hand entfernen.
    Dienstag, 22. September 2009 14:28
  • Hallo Tiran1984,

    bezüglich der Buttons hast du wie ich sehe schon eine Lösung gefunden. Was den Unterschied zwischen SDI und MDI angeht, findest du am Beispiel von benutzerdefinierten Aufgabenbereichen hier einige Infos:
    http://msdn.microsoft.com/de-de/library/bb608620.aspx

    Viele Grüße
    Jan
    • Als Antwort markiert Tiran1984 Mittwoch, 23. September 2009 06:20
    • Tag als Antwort aufgehoben Tiran1984 Mittwoch, 23. September 2009 06:20
    Dienstag, 22. September 2009 16:28
  • Guten Morgen

    also meine Lösung ist sehr pragmatisch den ich lösche meine Buttons von Hand. und wie gesagt die Buttons werden nicht in einer von mir festgelegten Leiste eingefügt sondern in die Benutzerdefinerte Symbolleiste.

    Kann ich irgendwie eine eigene Leiste definieren die dann auch auserhalb des Add-ins Bereich liegt?

    Vielen Dank
    Michael
    Mittwoch, 23. September 2009 06:24
  • Hallo Tiran1984,

    jetzt bin ich etwas verwirrt. Du schreibst oben, dass du Office 2007 verwendest. Benutzerdefinierte Symbolleisten gibt es ab Office 2007 aber nicht mehr. Möchtest du nun ein Ribbon für Office 2007 definieren oder eine Symbolleiste für Office 2003 oder früher?

    Gruß
    Jan
    Mittwoch, 23. September 2009 10:48
  • ja ich nutze office 2007 aber ich möchte gerade eine office 2000 leiste einfügen damit ich abwärts auch noch kann. und meine erstelle leiste soll eigentlich "mybar" heisen aber der button kommt in Benutzerdefinierte Symbolleisten

    Danke
    Michael
    Mittwoch, 23. September 2009 14:22
  • Hallo Tiran1984,

    benutzerdefinierte Symbolleisten gibt es in Office 2007-Anwendungen, die bereits die Multifunktionsleiste verwenden, nicht mehr. Insofern hast du keine Möglichkeit, eine Symbolleiste aus 2000 zu verwenden. Office 2007 unterstützt nur noch eine einzige Leiste (Symbolleiste für den Schnellzugriff), die vom Anwender angepasst werden kann. Weitere Symbolleisten können nicht hinzugefügt werden. Dies geht also nur noch über die Multifunktionsleiste, die per XML oder im Designer von Visual Studio angepasst oder erweitert werden kann. Dabei gelten Add-Ins auf Anwendungsebenen wie der Name schon sagt anwendungsweit (für alle Dokumente) und Anpassungen auf Dokumentebene werden mit einem einzelnen Dokument gespeichert.

    Viele Grüße
    Jan
    Mittwoch, 23. September 2009 14:43
  • Danke für die antwort und so wie ich das bestehe muss ich dann zwei add-ins schreiben, einmal für die alte version und einmal für die 2007.
    Mittwoch, 23. September 2009 15:00
  • Hallo Tiran1984,

    ja, ich würde zwei Add-Ins schreiben. Einmal für die Versionen bis 2003 und einmal für die Versionen ab 2007. Im Setup würde ich dann die installierte Office-Version abfragen und die entsprechenden Add-Ins sowie eventuell benötigte Komponenten (beispielsweise die PIAs) installieren.

    Viele Grüße
    Jan
    Mittwoch, 23. September 2009 17:17
  • Hallo Jan,
    so dann werde ich wohl versuchen 2 add ins zu machen! hab dann gestern versucht mein bestehenenden code in ein add-in umzuwandeln leider ohne erfolg. Den beim compilen wird mir gesagt das ich zwei dllmain habe. leider finde ich nur die vom addin.

    dann habe ich versucht die bestehende dll zu importieren doch auch leider ohne erfolg. Sobald ich versuche eine Function aufzurufen geht das addin nicht mehr. Könntest du mir nochmal ein tip geben?

    Danke
    Michael
    Donnerstag, 24. September 2009 08:12
  • Hallo Michael,

    zunächst einmal könntest du natürlich auch bei der alten Symbolleiste bleiben. Die wird dann aber standardmäßig in Office 2007 im Register "Add-Ins" und darunter in der Gruppe "Benutzerdefinierte Symbolleisten" angezeigt, was ja von dir nicht gewollt ist.

    Bezüglich der zwei dllmain habe ich keine pauschale Lösung. Dafür müsste ich den Code sehen. Ich würde dir aber dazu raten, das Add-In für Office 2007 mit VSTO neu zu erstellen. Du müsstest dann das Grundgerüst des Add-Ins neu aufsetzen und die Syntax des Codes anpassen. Inhaltlich bleiben die usprünglichen Befehle aber ja erhalten, sodass der Aufwand gering ist.

    Viele Grüße
    Jan
    Donnerstag, 24. September 2009 16:08
  • Guten Morgen
    danke für deine Informationen! ja dadurch das ich jetzt warscheinlich zwei addins brauche habe ich die grundfunktionen in eine externe dll ausgelagert. aber jetzt habe ich das problem das die funktion in der externen dll aufrufen kann aber diese kann keine weitere aufrufen, den dann kommt der Fehler
    Unbehandelte Ausnahme bei 0x002a30ee in WINWORD.EXE: 0xC0000096: Privileged instruction.
    
    selbst wenn beide methoden leer sind. Kannst du mir da ein plausieble lösung geben
    Freitag, 25. September 2009 06:13
  • Hallo Michael,

    vielleicht hilft dir einer der folgenden Links weiter:

    http://social.answers.microsoft.com/Forums/en-US/vistaperformance/thread/40c2a96e-c0b3-4a8c-ae56-99ed8393acea
    http://www.microsoft.com/msj/1097/hood1097.aspx

    Ansonsten kann ich zu deinen letzten Fragen aus der Ferne nicht viel sagen. Ich kenne deine DLLs ja nicht und kann deine Probleme daher an meinem Rechner nicht nachvollziehen.

    Viele Grüße
    Jan
    Freitag, 25. September 2009 07:29
  • Hallo 



    also was ich jetzt heraus gefunden habe ist. Das die Dll die ich
    verwenden möchte eine regular dll ist. Kann ich die die irgendwie in
    mein add-in mit einbinden?



    und ich bin jetzt dabei das addin für ab office 2007 zu erstellen jetzt
    habe ich nur ein problem und zwar ich würde gerne eigene icons
    verwenden doch diese wollen nicht geladen werden.



    ich habe ganz oben mui" loadImage="onGetImage"> definiert und die methode sieht so aus
    Public Function onGetImage(ByVal control As Office.IRibbonControl) As stdole.IPictureDisp Dim pictureDisp As stdole.IPictureDisp pictureDisp = ImageAxHost.Image_Convert(GetResourceBitmap("logo.gif")) Return pictureDisp End Function Public Function GetResourceBitmap(ByVal resourceName As String) As Bitmap Dim asm As Assembly = Assembly.GetExecutingAssembly() Dim stream As Stream = asm.GetManifestResourceStream("WordAddin4." & resourceName) Dim image As Bitmap = New Icon(stream).ToBitmap() stream.Close() Return image End Function Friend Class ImageAxHost Inherits System.Windows.Forms.AxHost Sub New() MyBase.New(Nothing) End Sub Public Shared Function Image_Convert(ByVal image As System.Drawing.Image) As IPictureDisp Return AxHost.GetIPictureDispFromPicture(image) End Function
    hab auch schon andere dinge versucht aber leider ohne erfolg

    über einen tip zu beidem wäre ich sehr froh


    Dienstag, 29. September 2009 10:29
  • Hallo Tiran1984,

    eine DLL kannst du als Verweis deinem Projekt hinzufügen (Projekt -> Verweis hinzufügen).

    Für Infos zur Erstellung der Multifunktionsleiste schau dir mal die Infos unter http://msdn.microsoft.com/de-de/library/bb386097.aspx an bzw. auch die weiteren Links innerhalb des Knotens. Wenn du bislang noch nicht mit VSTO gearbeitet hast und dennoch alles von Hand programmieren möchtest, empfehlen ich dir zunächst einmal ein Ribbon mit dem Designer zu erstellen und dir dann den generierten Code anzuschauen.
    Da ich den kompletten Code nicht kenne und du auch keine konkreten Fehlermeldungen lieferst, kann ich so nicht mehr dazu sagen...

    Viele Grüße
    Jan
    • Als Antwort vorgeschlagen Jan Tittel Freitag, 9. Oktober 2009 17:03
    Mittwoch, 30. September 2009 09:18
  • Das mit dem Verweis hinzufügen ging leider nicht.

    Es kommt "Stellen sich sicher, dass auf die Datei zugegegriffen werden kann und das sie eine gültige Assembly oder COM Komponente ist
    Mittwoch, 30. September 2009 10:06
  • Hallo Tiran1984,

    auf welche DLL versuchst du denn zuzugreifen? Wenn es deine eigene DLL ist, sollte dies kein Problem darstellen. Natürlich kannst bzw. darfst du auch aus lizenztechnischen Gründen nicht pauschal alle DLLs in dein Projekt aufnehmen. Für Office XP, 2003 und 2007 kannst du am besten die PIAs verwenden, die du auch weiterverteilen darfst. Siehe http://social.msdn.microsoft.com/Forums/de-DE/officede/thread/a5a32a72-b323-4bf2-b09a-1b1cb2df73e6.

    Gruß
    Jan
    Mittwoch, 30. September 2009 10:51
  • ja es ist eine eigene. aber es ist keine mfc dll. macht das was aus?

    habe jetzt nochmal schnell eine kleine dll gemacht und auf diese kann ich auch nicht verweisen
    Mittwoch, 30. September 2009 11:09
  • Hallo Tiran1984,

    schau mal, ob dir der folgende Link hilft:
    http://support.microsoft.com/kb/821631/de

    Gruß
    Jan
    Mittwoch, 30. September 2009 17:26
  • Guten Tag

    also das war auch ein Satz mit x. Kann es sein das ich win32 dll's nicht aus einem addin von office 2007 aufrufen kann?

    Habe jetzt nochmal etwas im netz gesucht in hab öffter mal was mit wrappern gelesen. aber leider noch kein beispiel gefunden.

    Hast du da etwas erfahrung schon gesammelt  


    Donnerstag, 1. Oktober 2009 11:14
  • Hallo Tiran1984,

    schau mal dort nach, da solltest du alles finden:

    http://msdn.microsoft.com/de-de/library/sd10k43k.aspx

    Viele Grüße
    Jan
    Donnerstag, 1. Oktober 2009 14:15
  • Hallo Tiran1984,

    haben dich die Beispiele zur Nutzung von COM unter .NET weitergebracht?

    Viele Grüße
    Jan
    Freitag, 2. Oktober 2009 08:45
  • Also da hat auch noch nicht viel geholfen ist zwar alles nicht schlecht aber irgendwie will es nicht so wie ich will/breuchte.

    Kann ich irgendwie herausfinden was für eine art dll es ist?

    Ich habe auch noch versucht mit dllimport von System.Runtime.InteropServices. Da werden die dll geladen aber dann  bekomm ich immer die fehlermeldung System.Runtime.InteropServices.COMException obwohl die Funktion nichts macht und void ist.


    Freitag, 2. Oktober 2009 08:46
  • Hallo Tiran1984,

    da es wie von dir geschrieben eine eigene DLL ist, müsstest du selbst wissen, was du erstellt hast... Zu der von dir genannten Fehlermeldung gibt es hier weitere Infos:

    http://msdn.microsoft.com/de-de/library/af1y26ew.aspx

    Viele Grüße
    Jan
    Freitag, 2. Oktober 2009 10:48
  • ja irgendwie geht es jetzt mit Interopt

    Aber dann hat sich gleich das andere Problem aufgetan. Warscheinlich etwas einfacher. Und zwar muss ich die xml datei in der steht wie die Bars aufgebaut sind dynamisch nachladen. dazu habe ich jetzt im ordner vom addin eine xml datei angelegt. Wenn ich aus VS starte geht es wunderbar. Aber wenn ich jetzt versuche das Word vom Desktop aus zustarten, kommt keine leiste.  Den das addin sucht jetzt in dem Ordner wo Word ausgeführt wurde,in diesem fall Desktop,  nach der XML datei.

    Also muss ich jetzt den Addin Pafd heruausfinden. Aber ich finde nichts wie. kannst du mir sagen wie ich den pfad herausbekomme
    Freitag, 2. Oktober 2009 14:34
  • Hallo Tiran1984,

    das Application-Objekt verfügt über die zwei Eigenschaften "AddIns" und "COMAddIns". Über diese stehen dir Auflistungen mit allen AddIns zur Verfügung. Für ein konkretes AddIn gibt es dann wiederum die Eigenschaft "Path".

    Anhand der Art deiner zahlreichen Fragen sehe ich, dass viele grundlegende Konzepte noch neu für dich sind. Da ist das, was du vorhast, natürlich nicht ganz einfach und ich kann mir gut vorstellen, dass noch einige weitere Fragen aufkommen... Ich kann dir nur empfehlen, dich erst mal ordentlich mit den Grundlagen vertraut zu machen. Spezielle Fragen, die nicht mehr direkt mit diesem Thread zu tun haben, stellst du dann vielleicht besser separat, um eben auch mehr Experten anzusprechen und somit eventuell auch schneller eine Antwort zu erhalten - das ist nur als Tipp gemeint.

    Viele Grüße
    Jan
    Samstag, 3. Oktober 2009 09:22
  • ja da hast du recht! ich komme bis jetzt aus der java schiene. und bin noch recht neu in der MS Schiene. Ich kann mich hier nur sehr bei dir bedanken da du mir immer mal mit rat und tat weiterhilfst.

    Die Grundfunktionen von meinem addin gehen jetzt schonmal jetzt muss ich es nur noch anpassen ich hoffe das geht dann einfacher.

    Samstag, 3. Oktober 2009 10:16
  • Hallo Tiran1984,

    wenn du bislang aus der Java-Schiene kommst, empfehle ich dir als Programmiersprache unter .NET übrigens C# anstelle von Visual Basic, da sich die Syntax von Java und C# sehr ähnlich ist. Außerdem würde ich auf COM-Komponenten wann immer möglich verzichten und stattdessen voll auf .NET setzen. .NET ist wesentlich einfacher und bietet einige Vorteile. Die alte Programmierweise wurde ja auch nicht umsonst abgelöst... Da dein AddIn auch unter alten Office-Versionen laufen soll, bist du aber leider teilweise zu COM gezwungen und musst dich dementsprechend mit alten Technologien "rumschlagen". Ich hoffe, dies hat dich nicht zu sehr demotiviert, weiterhin für MS-Produkte zu entwickeln ;-)

    Viele Grüße
    Jan
    Samstag, 3. Oktober 2009 11:26
  • Hallo Tiran1984,

    da ich länger nichts mehr von dir gehört habe, gehe ich davon aus, dass du mit den Infos deine Aufgabe lösen konntest.

    Viele Grüße
    Jan
    Freitag, 9. Oktober 2009 17:05