Fehler "COMException wurde nicht behandel."



  • Hallo, ich arbeite erst seit kurzem mit C#. Ich wollte ein kleines Programm schreiben und ausprobieren, und kann es aber nicht ausführen, weil irgendeine Klasse nicht registriert ist:

    Der Fehler

    Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

    erscheint in der Zeile

    ((System.ComponentModel.ISupportInitialize)(this.axTws1)).EndInit();
    

    in der Designer.cs :

    // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(722, 449);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.axTws1);
                this.Name = "Form1";
                this.Text = "Form1";
                ((System.ComponentModel.ISupportInitialize)(this.axTws1)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private AxTWSLib.AxTws axTws1;
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Label label1;
        }
    }
    

    Es liegt an einer ActiveX-Komponente, die ich heruntergeladen, zum Projekt hinzugefügt habe und dann auf das Formular plaziert habe. Genau nach dem Plazieren des ActiveX auf dem Formular taucht der Fehler zum ersten mal auf!

    Das ActiveX ist das TwsControl für Aktiendatenverbindung.

    Was kann ich denn nur machen? Ich brauch unedingt schnell Hilfe!! 😮



  • hallo,
    guck doch mal nach ob das Objekt "axTws1" existiert und ob am Anfang von Init() auch das zugehörige

    ((System.ComponentModel.ISupportInitialize)(this.axTws1)).BeginInit();
    

    zu finden ist.



  • ja das existiert!

    private void InitializeComponent()
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                this.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.label1 = new System.Windows.Forms.Label();
                this.axTws1 = new AxTWSLib.AxTws();
                ((System.ComponentModel.ISupportInitialize)(this.axTws1)).BeginInit();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(350, 61);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(116, 37);
                this.button1.TabIndex = 0;
                this.button1.Text = "Verbinden";
                this.button1.UseVisualStyleBackColor = true;
                // 
                // button2
                // 
                this.button2.Location = new System.Drawing.Point(521, 63);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(128, 35);
                this.button2.TabIndex = 1;
                this.button2.Text = "Trennen";
                this.button2.UseVisualStyleBackColor = true;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(423, 164);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(35, 13);
                this.label1.TabIndex = 2;
                this.label1.Text = "label1";
                // 
                // axTws1
                // 
                this.axTws1.Enabled = true;
                this.axTws1.Location = new System.Drawing.Point(277, 253);
                this.axTws1.Name = "axTws1";
                this.axTws1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axTws1.OcxState")));
                this.axTws1.Size = new System.Drawing.Size(73, 53);
                this.axTws1.TabIndex = 3;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(704, 450);
                this.Controls.Add(this.axTws1);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                ((System.ComponentModel.ISupportInitialize)(this.axTws1)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Label label1;
            private AxTWSLib.AxTws axTws1;
        }
    }
    


  • ActiveX-Komponenten (COM) müssen m.E. zuerst mit dem DOS-Befehl 'regsvr32' registriert werden.



  • Davon habe ich ja noch nie etwas gehört ... in der 2005er Version von Visual Studio C# ging das auch einfach so, aber jetzt auf dem neuen Laptop und der 2008er Version kommt immr dieser komische Fehler ...

    Also soll ich jetzt dieses regsvr32 aufrufen? und was dann??



  • ...dann sollte die COM-Komponente ihre GUID (und sonstigen Krempel) in der registry ablegen und sollte eigentlich benutzt werden können.



  • Schön und gut, aber "regsvr32" kann bei mir nicht aufgerufen werden ... "Zum Registrieren eines Moduls muss der Name einer Binärdatei eingegeben werden.
    Syntax: [...]"
    Sagt mir dann Vista ...

    Außerdem dachte ich, dass mit der Installation des ActiveX solche Dinge auch in die Registry übernommen werden. Wozu gibts denn dann noch ne Installation??



  • Wenn deine COM-Komponente nen Installer hat, wird die wohl normalerweise "regsvr32 PfadZur.Dll" aufrufen.

    Kann es sein das die DLL ne 32bit-DLL ist und du an nem 64bit-System sitzt und CPU-Type auf "Any" stehen hast?



  • also n 64-bit vista hab ich ... wo steht cpu-type?
    und woher weiß ich, ob die COM 32 bits ist?



  • In VS2008-Prof gibt es unter "Build" -> "Configuration Manager" eine Spalte "Platform".
    Wenn dort "Any CPU" ausgewählt ist, wird deine Anwendung vermutlich als 64bit-Anwendung laufen - und 64bit-Anwendungen können nur 64bit-DLLs laden.
    Sollte die COM-dll 32bit sein, müsstest du deine Anwendung also auf 32bit "downgraden" (also Platform=x86).

    Hier gibts ein Snippet um herauszufinden ob eine Datei 32bit oder 64bit ist:
    http://dotnet-snippets.de/dns/c-erkennen-ob-eine-exe-oder-dll-als-64bit-kompiliert-wurde-SID1181.aspx



  • Gut dass ich VS2008 Express Edition auf Deutsch und finde keinen "Konfigurationsmanager" ...

    Kann man das da auch rausfinden??

    Edit: Und das Snippet krieg ich auch noch nicht wirklich eingebunden ... Soll das eine Konsolenanwendung werden?



  • ha ich habe jetzt herausgefunden, dass die express-version von visual c# keine CPU-Spezifikation unterstützt ... Das wars wohl mit dem Projekt 😞



  • http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/64efdc19-e168-4dcc-95d8-38ff57dc726e
    ...wird bei c# wohl genauso sein.

    Das Snippet stellt kein vollständiges Projekt dar, hat derjenige der das da eingestellt hat wohl aus nem WinForms-Projekt rauskopiert...



  • ich das probiert mit dem ändern in der projektdatei ... jetzt kann ich das projekt nicht mehr öffnen ...



  • tjo, dann Änderung rückgängig machen und ärgern 😉



  • Änderung rückgängig machen hat nix gebracht ... es lassen sich übrigends keine Projekte mehr öffnen ... nur noch neue erstellen 😕
    aber vielleicht liegts nich daran, keine ahnung ... ich programmiere jetzt auf einem anderen laptop mit 32-bit-vista 😉


Anmelden zum Antworten