This project has moved. For the latest updates, please go here.

Word2000: Registrierung der Eventhandler bringt Exceptions (NO 1.6.0)

Jul 15, 2013 at 12:34 PM
Hallo zusammen,

ich will nochmal auf den Fehler mit der Eventregistrierung kommen.
Mein Projekt läuft prinzipiell unter Benutzung von NetOffice echt gut, aber die Eventregistrierung scheint in Verbindung mit Word2000 überhaupt nicht zu gehen.
Ich habe mir heute auch die Version 1.6.0 gezogen (Danke an Sebastian!) aber das Problem ist das Gleiche wie schon mit der 1.5.2.

Ich kann es schon mit dem mitgelieferten Demoprogramm aus dem Paket (NetOffice 1.6.0\NET 2.0\Examples\Word\C#\Examples) nachvollziehbar machen:
Nach der problemlosen Übersetzung rufe ich das kompilierte Programm WordExamplesCS2.exe aus und wähle die Demo "Using Events".
  • Word2000 bleibt komplett einfach stehen, die Demo auch.
  • Nach einem Timeout kann ich Word schliessen, bekomme die übliche und unnötige "Willst das Problem an M$ melden"-Meldung und dann wird die Exception "COMException (0x80004005): Specified instance doesnt implement the target event interface." angezeigt (unten der volle Trace)
  • Die anderen Demos laufen, Die Word-Kommunikation ist also sonst problemlos
  • Das gleiche unter Word 2003, 2007, 2010 läuft wunderbar
  • Leider habe ich kein Entwicklungssystem auf dem Word2000 Rechner aber eine schnell eingebaute Debugfunktion zeigt mor dass der Fehler immer am ersten Eventhandler liegt der aufgerufen wird, also beim "wordApplication_NewDocumentEvent".
        // we register some events. note: the event trigger was called from word, means an other Thread
        wordApplication.NewDocumentEvent += new NetOffice.WordApi.Application_NewDocumentEventHandler(wordApplication_NewDocumentEvent);
        wordApplication.DocumentBeforeCloseEvent += new NetOffice.WordApi.Application_DocumentBeforeCloseEventHandler(wordApplication_DocumentBeforeCloseEvent);
    
Entferne ich diese Zeile, so tritt der Fehler in der nächsten Zeile auf "wordApplication_DocumentBeforeCloseEvent".

Habe nur ich das Problem oder steh ich irgendwie auf nem Schlauch ? Ist für mich ein ernstes Problem, da Word2000 noch zu knapp 30% der Leute im Einsatz ist und letztendlich auch der Grund für die Suche nach Netoffice war.

Ich kann meine Kiste hier gerne für weitere Test zur Verfügung stellen, Teamviewer ist auch schon da. Gerne zu jeder Tages- und Nachtzeit!

Hat jemand eine Idee ?


Viele Grüße, Jochen


Hier der Trace:
Word / C# / .Net 2.0

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80004005): Specified instance doesnt implement the target event interface.
at NetOffice.SinkHelper.GetConnectionPoint(COMObject comProxy, IConnectionPoint& point, String[] sinkIds)
at NetOffice.WordApi.Application.CreateEventBridge()
at NetOffice.WordApi.Application.add_NewDocumentEvent(Application_NewDocumentEventHandler value)
at WordExamplesCS2.Example06.buttonStartExample_Click(Object sender, EventArgs e) in C:\Test\NetOffice 1.6.0\NET 2.0\Examples\Word\C#\Examples\WordExamples\Examples\Example06.cs:line 69
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3643 (GDR.050727-3600)

CodeBase: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

WordExamplesCS2
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/WordExamplesCS2.exe

System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3645 (GDR.050727-3600)

CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3644 (GDR.050727-3600)

CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3644 (GDR.050727-3600)

CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

ExampleBase
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/ExampleBase.DLL

WordApi
Assembly Version: 1.6.0.0
Win32 Version: 1.6.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/WordApi.DLL

NetOffice
Assembly Version: 1.6.0.0
Win32 Version: 1.6.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/NetOffice.DLL

OfficeApi
Assembly Version: 1.6.0.0
Win32 Version: 1.6.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/OfficeApi.DLL

VBIDEApi
Assembly Version: 1.6.0.0
Win32 Version: 1.6.0.0

CodeBase: file://192.168.0.50/Test/NetOffice%201.6.0/NET%202.0/Examples/Word/C%23/Examples/WordExamples/bin/Debug/VBIDEApi.DLL

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Coordinator
Jul 15, 2013 at 12:50 PM
schau ich mir heute abend sofort an und teste das durch.

Sebastian
Coordinator
Jul 15, 2013 at 7:44 PM
Es handelt sich hierbei um einen dokumentierten Bug in Word 2000 der mir auch schon mal über den Weg gelaufen ist.
Konkret reagiert Word auf die Methode FindConnectionPoint (in SinkHelper.cs => NetOffice Core) nicht bzw. bleibt dabei hängen wenn man einen Parameter(ID) übergibt den Word 2000 nicht kennt.(NetOffice versucht der Reihe nach von Version 15(2013) runter zu Version 9(2000) das höchstmögliche EventInterface zu bekommen) Es gibt 2 Wege den COM Event Container anzusprechen, der andere ist EnumConnectionPoint, den NetOffice auch beherrscht. Zuerst wird allerdings der Weg über FindConnectionPoint probiert da es leider andere Office Produkte gibt die in älteren Versionen wieder auf EnumConnectionPoint falsch reagieren. Ich kann nicht mehr tun als einen Schalter einzubauen der steuert welche Methode zuerst angewendet wird. (Mit EnumConnectionPoint hat Word2000 keine Probleme) Wenns ganz eilig ist kannst du das im Source selbst ändern in dem du im Source SinkHelper.cs in der Methode public static string GetConnectionPoint
die Reihenfolge der Methoden umtauschst. Ich werde am Wochenende das bestehende Release updaten und so einen Schalter einbauen(NetOffice.Settings.UseEnumConnectionPointFirst = true)

Sebastian
Jul 16, 2013 at 9:26 AM
Hallo Sebastian,

vielen Dank für die superschnelle und fundierte Antwort!
Ich habe in der Sinkerklasse jetzt mal testweise die beiden Aufrufe vertauscht und alle Projekte umgestellt auf .Net 2.0.
Danach lief das Demoprogramm problemlos durch mit der Eventregistrierung unter Word2000 und Word2010, ich bin begeistert!

Ich weiss jetzt nicht, welche Office-System nun Probleme machen wenn der Aufruf umgedreht wird, daher wäre ich für den Schalter auf jeden Fall sehr dankbar.
Prima, ich bau das jetzt mal in mein Projekt ein und stelle gleich alles um auf 1.6.0

Danke für die schnelle Hilfe, Jochen 'Nunz' Herz