COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Fehlerberichte, Hilfe und Anregungen zu TextMaker 2016 für Windows

Moderator: SoftMaker Team

Antworten
gundel
Beiträge: 4
Registriert: 24.02.2018 17:20:49

COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von gundel » 04.12.2018 12:41:31

Hallo,

Ich versuche eine Datei in TextMaker aus einer anderen Anwendung heraus zu öffnen und bekomme die Fehlermeldung "Methode 'Open' für das Objekt 'Documents' fehlgeschlagen".
Hier mein Testcode:

Code: Alles auswählen

    Dim tm As tmw.TextMaker
    Dim doc As tmw.Document
    
    Set tm = CreateObject("TextMaker.Application")  'GetObject(, "TextMaker.Application")
    tm.Visible = True
    
    'Set doc = tm.Documents.Open("D:\\Test.doc")'error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWordXP) ' error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWord97) 'error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWord6)
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , 17) ' docx, error
    'Set doc = tm.Documents.Open("D:\\Test.doc")'error
    'Set doc = tm.Documents.Open("D:\\Test.tmd")'error
    Set doc = tm.Documents.Open("D:\\Test.tmd", , , , tmFormatDocument)
    Debug.Print "Doc: " & doc.Fullname
   

Ich habe den obigen Code in Excel-VBA getestet (mit den Fehlern) und äquivalenten Code VS2017 C#, auch mit Fehlern.
Ich verwende TextMaker 2016 (768.1215) unter Win10 x64
Ich habe SoftMaker Office schon komplett neu installiert und versucht die TextMaker.tlb explizit zu registrieren (mit regsvr32), was aber zu der Fehlermeldung führte: "Das Modul "TextMaker.tlb" ist möglicherweise nicht mit der Version von Windows kompatibel, die Sie ausführen möchten. Überprüfen Sie, ob das Modul mit einer x86 oder x64 Version von regsvr32.exe kompatibel ist."
Ich habe es mit der regsvr32 aus system32 sowie aus syswow64 versucht, beide produzieren die gleiche Fehlermeldung.
Kann mir vielleicht jemand weiterhelfen?
Vielen Dank im Voraus,
Bernd

FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1158
Registriert: 11.06.2013 22:30:18

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von FFF » 04.12.2018 14:09:56

gundel hat geschrieben:
04.12.2018 12:41:31
Hallo,

Ich versuche eine Datei in TextMaker aus einer anderen Anwendung heraus zu öffnen und bekomme die Fehlermeldung "Methode 'Open' für das Objekt 'Documents' fehlgeschlagen".
Hier mein Testcode:

Code: Alles auswählen

    Dim tm As tmw.TextMaker
    Dim doc As tmw.Document
    
    Set tm = CreateObject("TextMaker.Application")  'GetObject(, "TextMaker.Application")
    tm.Visible = True
    
    'Set doc = tm.Documents.Open("D:\\Test.doc")'error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWordXP) ' error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWord97) 'error
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , tmFormatWinWord6)
    'Set doc = tm.Documents.Open("D:\\Test.doc", , , , 17) ' docx, error
    'Set doc = tm.Documents.Open("D:\\Test.doc")'error
    'Set doc = tm.Documents.Open("D:\\Test.tmd")'error
    Set doc = tm.Documents.Open("D:\\Test.tmd", , , , tmFormatDocument)
    Debug.Print "Doc: " & doc.Fullname
   

Ich habe den obigen Code in Excel-VBA getestet (mit den Fehlern) und äquivalenten Code VS2017 C#, auch mit Fehlern.
Ich verwende TextMaker 2016 (768.1215) unter Win10 x64
Ich habe SoftMaker Office schon komplett neu installiert und versucht die TextMaker.tlb explizit zu registrieren (mit regsvr32), was aber zu der Fehlermeldung führte: "Das Modul "TextMaker.tlb" ist möglicherweise nicht mit der Version von Windows kompatibel, die Sie ausführen möchten. Überprüfen Sie, ob das Modul mit einer x86 oder x64 Version von regsvr32.exe kompatibel ist."
Ich habe es mit der regsvr32 aus system32 sowie aus syswow64 versucht, beide produzieren die gleiche Fehlermeldung.
Kann mir vielleicht jemand weiterhelfen?
Vielen Dank im Voraus,
Bernd
Hm, bei mir funktionierts, etwa so:
METHOD pb_TM_OpenDocClick(sender AS System.Object , e AS System.EventArgs) AS VOID
VAR oTM:=TMw.TextMakerClass{}
oTm:Activate()
//VAR oDoc := oTM:Documents:Open("D:\Eigen\"+ "Josef3.doc")
VAR oDoc := oTM:Documents:Open("C:\Users\K\Documents\SoftMaker\Templates 2016\Deutsch\Masterseite_Programme.tmv")

...... Sicher, daß im Pfad der doppelte Backslash nötig ist?
Mit freundlichem Gruß
Karl
emC 7 & SM 2016 rev766.0331 @ W8.1/64 /// SM 2018 rev. 970/0826/64, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276;
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6490.

martin-k
SoftMaker Team
SoftMaker Team
Beiträge: 5329
Registriert: 03.12.2003 14:32:06
Kontaktdaten:

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von martin-k » 04.12.2018 14:15:59

Dim doc as Object und bitte kein doppelter Backslash.
Martin Kotulla
SoftMaker Software GmbH

gundel
Beiträge: 4
Registriert: 24.02.2018 17:20:49

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von gundel » 04.12.2018 14:48:05

martin-k hat geschrieben:
04.12.2018 14:15:59
Dim doc as Object und bitte kein doppelter Backslash.
Danke @FFF und martin für die schnellen Antworten.

Der Doppelslash kam vom rauslöschen des echten Pfades aus meinem Testcode.

Ändern des Deklarationstyps von doc auf Object im VBA-Code hat leider nicht geholfen, ich bekomme immer noch den oben erwähnten Laufzeitfehler.

In c# habe ich doc als dynamic deklariert, hat auch nix geholfen. Hier die dazugehörige Fehlermeldung:

Code: Alles auswählen

System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
   bei tmw.IDocuments.Open(String FileName, Boolean ReadOnly, String PasswordDocument, String WritePasswordDocument, TmSaveFormat Format)
  


In c# passiert interessanterweise folgendes, wenn ich den Format-Parameter beim Aufruf von Open(...) weglasse, also nur den Dateinamen übergebe:
Der Aufruf produziert keinen Fehler, aber das Rückgabeobjekt ist null. Lustigerweise ist dann die Datei in TM geöffnet. Ich habe auch versucht, mir ein Handle auf die Datei über die Auflistung Application.Documents zu holen, das schlägt dann aber im weiteren Verlauf fehl, sobald ich versucht auf eine der Document-Properties zuzugreifen. So versuche ich die FormFields auszulesen und bekomme bei zugriff auf doc.FormFields.Count folgenden Fehler:

Code: Alles auswählen

System.Runtime.InteropServices.COMException: Ausnahmefehler des Servers. (Ausnahme von HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
   bei tmw.IDocument.get_FormFields()

Hat jemand noch einen anderen Vorschlag?

FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1158
Registriert: 11.06.2013 22:30:18

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von FFF » 04.12.2018 17:46:23

gundel hat geschrieben:
04.12.2018 14:48:05
In c# habe ich doc als dynamic deklariert, hat auch nix geholfen. Hier die dazugehörige Fehlermeldung:

Code: Alles auswählen

System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
   bei tmw.IDocuments.Open(String FileName, Boolean ReadOnly, String PasswordDocument, String WritePasswordDocument, TmSaveFormat Format)
Irgendwas ist da faul. Ich kann mit dem gezeigten Code problemlos auf Textmaker los, aber wenn ich das gleich mit Planmaker versuche, sehe ich im Debugger schon nach der Instantisierung des App-Objekts, daß zwar die Properties "da" sind, aber viele schon mit Access violation "belegt" sind.
Mit freundlichem Gruß
Karl
emC 7 & SM 2016 rev766.0331 @ W8.1/64 /// SM 2018 rev. 970/0826/64, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276;
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6490.

gundel
Beiträge: 4
Registriert: 24.02.2018 17:20:49

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von gundel » 05.12.2018 23:15:44

So, habe in C# nochmal genauer getestet.
Im Anhang:
TextMakerTest.zip
C# Beispielprojekt zum nachvollziehen des Fehlers (VisualStudio 2017 oder SharpDevelop 5)
(13.2 KiB) 19-mal heruntergeladen
habe ich ein C# Projekt hochgeladen, mit dem eure Entwickler/interessierte Forumisten das reproduzieren können sollten. Das Projekt lässt sich mit Visual Studio 2017 oder SharpDevelop öffnen, kompilieren und produziert (zumindest auf meiner Maschine) im Modul "MainForm.cs" in Zeile 56 einen Laufzeitfehler (dabei wird auch immer ein Eintrag im Windows-Application Eventlog erstellt!).

Zum nachvollziehen die Zip einfach in einen Ordner auspacken, die Solution oder das CSproject in der IDE aufmachen, kompilieren und das Programm einfach starten und im Dialog auf "Test" klicken. Zum genaueren Untersuchen setzt man an der oben genannten Stelle einen Haltepunkt. Die Testdatei ist im Projekt enthalten und wird beim kompilieren immer wieder ins Debug-Verzeichnis kopiert. Wer an der Testdatei etwas ändern will sollte das in der Datei tun, die direkt im Projektverzeichnis liegt.

Hier nochmals eine Zusammenfassung meiner Beobachtungen:
  1. Ausgangsbasis: TextMaker 2016 Build 768.1215, C# unter .NET 4 (VisualStudio oder SharpDevelop)
  2. Es muss (wie martin-k schon korrekt sagte), das Dokument nicht explizit, sondern als Object (bzw. in C# als dynamic) deklariert werden, sonst geht das ganze schon beim öffnen der Datei schief.
  3. Leider ist der Zugriff auf Untereigenschaften wie z.B. FormFields nicht möglich, egal, ob ich direkt (über doc.FormFields) oder über eine Zwischenvariable (also dynamic fields = doc.FormFields) zugreife. Dies belegt m.E. der Absturz in Zeile 56 deutlich. Ich habe im Code auch in Kommentaren die verschiedenen Varianten, mit denen ich es noch versucht habe hinterlegt.
  4. Wenn ich am Haltepunkt versuche im Debugger das app-Objekt (= TextMaker.Application) aufzuklappen, stürzt mir die Exe in Debugger ab.
    Siehe auch folgenderScreenshot:
Screen-TestTextMaker.png
Screenshot beim Debuggen
Screen-TestTextMaker.png (25.01 KiB) 608 mal betrachtet
Hier sieht man auch, wie das Dokument-Objekt als seltsames System._ComObject auftaucht, das Anwendungs-Objekt dagegen als TextMakerClass.

FunFact:
In VisualStudio kann der Debugger nicht nur mehr als der von SharpDevelop, sondern auch mehr als der laufende Code:
Screen-TestTextMakerVisualStudio.png
Screen-TestTextMakerVisualStudio.png (29.25 KiB) 608 mal betrachtet
Wie gesagt, auch in VS2017 reicht ein Klick auf den Pfeil vor "app", um die laufende Debug.Exe ins Nirvana zu schicken.

Eventuell mache ich ja auch beim starten des tmw COM-Servers was falsch? Ich bin da relativ simpel auf

Code: Alles auswählen

app = new tmw.TextMakerClass
verfallen, scheint keinen Unterschied zu machen ob, ich alternativ auch

Code: Alles auswählen

app = new tmw.TextMaker
verwende, im Debugger ist es immer ein Objekt vom Typ TextMakerClass.

Für mich ist das Ganze ein ziemliches Desaster, da ich genau diese Eigenschaft (FormFields) benötige, um aus meinem Programm haufenweise Daten in Dokumente zu übertragen. Bis mindestes 24.10.2018 hat das alles noch prima Funktioniert, seit letztem Montag (3.12.2018) geht nix mehr. Ich habe MS in Verdacht, hier mit einem Update dazwischengegangen zu sein, denn an meinem bisher funktionierenden Code habe ich nix geändert.

Daher hier meine Bitte an die Community/Entwickler [-o< : Kann jemand mit SharpDevelop oder Visual Studio versuchen das zu reproduzieren? Nicht das an meiner Kiste was verbogen ist :? .

Vielen Dank im voraus für eure Mühe =D> !

LG, Bernd

Edit: Typos und zweiter Screenshot/FunFact

gundel
Beiträge: 4
Registriert: 24.02.2018 17:20:49

Re: COM Zugriff auf Textmaker von VBA oder c# schlägt fehl

Beitrag von gundel » 17.12.2018 21:12:27

Hallo zusammen!

Wollte nur mal fragen, ob jemand von denen, die sich das Beispielprojekt heruntergeladen haben, den Fehler reproduzieren konnte?
Ich hänge total im Seil, habe meinen kompletten Code noch mal geprüft, und bekomme immer noch spätestens beim Zugriff auf Document.FormFields einen Laufzeitfehler.

Jeder Tipp, was ich da falsch mache ist mir willkommen!

@Support: Könnte ich von euch noch einen kleinen Hinweis bekommen, woran das hier liegen könnte? Ich wäre ja auch gere bereit auf SM 2018 upzugraden, wenn es dort läuft ...

LG, Bernd

Antworten

Zurück zu „TextMaker 2016 für Windows“