ole typenkonflikt zwischen borland5 und borland6



  • hallo,

    habe einen programm die mit borland5 geschrieben ist, die auf office (word) zugreift.
    kurz gesagt:
    über eien formblatt (empfängerdaten usw. eingeben) einen seriebbrief erstellen (word).
    mein problem:
    wenn ich diesen programm mit borland6 compeliere und linke -> funktioniert und erstellt eine .exe datei. die kann ich später auch starten, aber nachdem ich die nötigen daten einngetippt habe und diesen dann speichern möchte, bekomme ich eine fehlermeldung
    OLE-Typenkonflikt!

    wie könnte ich diesen fehler beheben.
    bedanke mich im voraus. 🙂



  • Hallo

    Du übergibst dem Word-OLE Container für irgendeine Methode falsche Parameter. Der Compiler kann sowas nicht bemerken. Verwende den Debugger um die genaue Stelle einzugrenzen, und schau in der VBA-Hilfe nach was die Methoden für Parameter erwarten.

    bis bald
    akari



  • danke für deine schnelle antwort, aber ich kann da nichts feststellen. hier ein auszug aus der quellcode. ich hoffe es hilft der sache weiter.

    in der header datei:
      // Initialisierung des Word OLE-Servers
      bool __fastcall InitOleServer(Variant &vOLEWord);
    
      // Word-Dokument erzeugen, ggf. speichern und/oder drucken
      void __fastcall CreateDocument(Variant &vOLEWord,
        AnsiString slTemplateFile, AnsiString slSaveFile, bool blPrint);
    
      // Beenden des Word OLE-Servers
      void __fastcall TerminateOleServer(Variant &vOLEWord);
    
    in main datei:
    // OLE-Server initialisieren, die Variable blWordStarted
      // wird auf true gesetzt falls Word nicht bereits aktiv war
      Variant vOLEWord;
    
    bool __fastcall TfrmMain::InitOleServer(Variant &vOLEWord)
    {
      vOLEWord = Unassigned;
      try
      {
        // vielleicht läuft Word ja bereits (wenn nicht, wird hier
        // eine Exception generiert - aber die ist ja behandelt :)
        vOLEWord = GetActiveOleObject("Word.Application");
        return false;
      }
      catch(...)
      {
         try
         {
           // vielleicht läuft Word ja bereits...
           vOLEWord = CreateOleObject("Word.Application");
           return true;
         }
         catch(Exception& e)
         {
            // Wahrscheinlich kein Word auf dem Rechner...
            Application->MessageBox(e.Message.c_str(),"OLE-Error",MB_ICONERROR);
            vOLEWord = Unassigned;
         }
      }
      return true;
    
    //---------------------------------------------------------------------------
    // Word-Dokument erzeugen, ggf. speichern und/oder drucken
    //---------------------------------------------------------------------------
    void __fastcall TfrmMain::CreateDocument(Variant &vOLEWord,
      AnsiString slTemplateFile, AnsiString slSaveFile, bool blPrint)
    {
      try
      {
        // falls Word-Fenster sichtbar sein soll,
        // muss folgende Zeile aktiviert werden:
        // vOLEWord.OlePropertySet("Visible", true);
    
        // Falls die Vorlagen-Datei nicht existiert, schimpfen und beenden:
        if(!FileExists(slTemplateFile))
        {
          Application->MessageBox("Vorlagendatei nicht gefunden !",
            "Abbruch",MB_ICONERROR);
          return;
        }
    
     // Word nur beenden, wenn es von uns zuvor gestartet wurde:
      if(blWordStarted) TerminateOleServer(vOLEWord);
    

    danke 🙂

    /Edit : Bitte beim nächsten Posten von Code auch die Cpp-Tags benutzen! sfds



  • Hallo

    Hier hast du eine Anleitung zum Benutzten des Debuggers. Benutzt Breakpoints um herauszufinden bei welche Zeile genau der Fehler kommt.

    bis bald
    akari


Anmelden zum Antworten