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

    Question

  • Hi, ich schreibe ich mal einen Hilferuf :-)!! (Hatte schon einen in einem Thread, aber hier ist das wohl eher richtig!)

    Ich erhalte die FM:

    Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    1. Ich hatte ein zuvor im OS Win7 64bit als admin über abgesicherten Modus mit regsvr32 registriertes ocx erfolgreich importiert.
    Dieses ocx names EIBnet.ocx eingefügt in ein VB.net Projekt wie folgt: Extras - Toolboxelemente auswählen- COM... Haken setzen. Damit kam es in die Toolboxleiste.
    2. Form erstellt mit "Platzhalterbutton1" - Debug: läuft
    3. Von dort das neu erstellte ActiveX-Control in das Form gezogen. Bei Versuch zu debuggen kommt o. g. FM.

    Es gibt ein Beispiel VB unter : http://www.dehof.de/eib/zips/VBtest.zip - DIESES BEISPIEL LÄUFT BEI MIR!

    Also kann es nicht an der Registrierung oder der OS-Version oder dem Framework liegen, sondern eher ein Denkfehler/Konfigproblem sein....

    Hat jemand eine Idee dazu? Bin für jeden Tip dankbar.

    Viele Grüße, Harry
    Thursday, February 25, 2010 1:52 PM

Answers

  • Hallo Harry,

    ich gehe davon aus, dass Deine COM Komponente als 32 Bit Version vorliegt. Erstellst Du Dein Projekt explizit für die x86 Plattform? By default wird das Projekt nach AnyCPU kompiliert und zur Laufzeit unter x64 als 64 Bit Prozess ausgeführt, der mit einer 32 Bit DLL nichts anfangen kann.
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Thursday, February 25, 2010 2:16 PM
  • Thursday, February 25, 2010 3:34 PM
  • Hallo Robert,

    mit Einschalten der Konfiguration ist das aber durchaus möglich.
    Hier gerade noch für VC# 2008 Express SP1 geguckt.

    Bei einem neuen Projekt muß dazu die x86 Konfiguration nur explizit
    im Konfiguration Manager (unter Erstellen) anlegen.

    Um sicher zu gehen: Erkennbar daran, dass man im Build Fenster
    csc.exe mit dem Parameter /platform: x86 ausgeführt wird.

    Und identisches nehme ich für VB 2008 Expres an,
    was ich hier nicht installiert habe.
    http://msdn.microsoft.com/de-de/library/8ck8e1y2.aspx

    Gruß Elmar
    Thursday, February 25, 2010 7:37 PM
  • ...und wenn man müde ist, sollte man die Fr... halten :-).... Naja, heute morgen, ausgeschlafen, einfach mal noch die CPU richtig eingestellt im c# - und geht!!!!

    CPU Auswahl im c# Express 2008 und Konfig wie folgt (in Klammern Deutsch für alle nicht-Insulanisch-sprechenden :-) ):

    From the menu: Tools >> Options. (DEUTSCHE VERSION:Vom Menü anklicken EXTRAS >> Optionen)
    In the Option Window check the "Show all settings" option (links unten in der Ecke, leicht zu überlesen im Fenster "Alle Einstellungen anzeigen")
    In the option list on the right: Projects and solutions >> General. (Projekte und Projektmappen >> Allgemein)
    Check the option "Show advanced build configurations" and then OK. (Haken bei "Erweiterte Buildkonfiguration anzeigen")
    Now you should have in the menu bar the platform and CPU listboxes enabled.
    In the CPU list choose "Configuration manager". (In der CPU Liste im Editor oben auf "Konfigurationsmanager" klicken)
    In the "Configuration manager" window choose <New> in the Platform column.  (Bei Aktive Projektmappenplattform <neu> auswählen)
    In the "New project platform" window choose x86 or another CPU type (x64/Itanium). (x86 auswählen)
    Now you can compile your project for the selected platform. (jetzt kannst Du Dein Projekt compilieren für die ausgewählte Plattform)

    Danke nochmals an ALLE, Spezialgrüße an Robert für den zielführenden Beitrag!!!
    Saturday, February 27, 2010 12:31 PM

All replies

  • Hi, nachdem keine Antwort mehr kam ;-) schreibe ich mal einen Hilferuf :-)!!
    Ich habe ein ähnliches Problem; Ich erhalte die FM:

    Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    1. Ich hatte ein zuvor im OS mit regsvr32 registriertes ocx importiert in ein VB.net Projekt names EIBnet.ocx wie folgt: Extras - Toolboxelemente auswählen- COM... Haken setzen. Damit kam es in die Toolboxleiste.
    2. Form erstellt mit "Platzhalterbutton1" - Debug: läuft
    3. Von dort das neu erstellte ActiveX-Control in das Form gezogen. Bei Versuch zu debuggen kommt o. g. FM.

    Es gibt ein Beispiel VB unter : http://www.dehof.de/eib/zips/VBtest.zip - DIESES BEISPIEL LÄUFT BEI MIR!

    Also kann es nicht an der Registrierung oder der OS-Version oder dem Framework liegen, sondern eher ein Konfigproblem sein....

    Hat jemand eine Idee dazu? Bin für jeden Tip dankbar.

    Viele Grüße, Harry

    Im Zusammenhang mit http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/b6f5bea2-d864-47a9-9a19-109f2efb337c

    Thursday, February 25, 2010 1:30 PM
  • Hallo Harry,

    ich gehe davon aus, dass Deine COM Komponente als 32 Bit Version vorliegt. Erstellst Du Dein Projekt explizit für die x86 Plattform? By default wird das Projekt nach AnyCPU kompiliert und zur Laufzeit unter x64 als 64 Bit Prozess ausgeführt, der mit einer 32 Bit DLL nichts anfangen kann.
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Thursday, February 25, 2010 2:16 PM
  • Hallo, Thorsten, danke für die schnelle Antwort.

    Das mit den 32 Bit ist korrekt. Ich frage mich allerdings, warum das Beispiel richtig kompiliert, das neue Projekt aber in den Fehler läuft bzw. wie ich das einstellen kann im Visual VB.net 2008 Express.... Das alte file lief beim Laden erstmalig durch die Kompatibilisierer :-) bevor es geladen wurde; was der da jedoch eingestellt hat, k. A.
    Ich habe die "Projekt-Eigenschaften" unter "Erweitert" schon kontrolliert, finde aber nichts, wo ich die CPU wählen könnte...
    Thursday, February 25, 2010 2:27 PM
  • Thursday, February 25, 2010 3:34 PM
  • Hallo GroßherzogthumBaden,

    Habe mal dein Problem angepackt J und folgendes gemacht:

    1)    Habe mal das Beispiel von Dir heruntergeladen (http://www.dehof.de/eib/zips/VBtest.zip) und wollte es zum Laufen machen. Da ich nicht die EIBnet.ocx hatte, habe ich sie auch heruntergeladen und so wie Du registriert (Command Prompt mit „Run as administrator“ aufgemacht und von c:\windows\system32 folgendes eingegeben: regsrv32 EIBnet.ocx à erfolgreich registriert

    2)    Mithilfe von Windows Forms ActiveX Control Importer-Tool (Aximp.exe) dass Typdefinitionen in einer COM-Typbibliothek für ein ActiveX-Steuerelement in ein Steuerelement für Windows Forms konvertiert habe ich folgende 3 Dateien erstellt: EIBNETLib.dll | AxEIBNETLib.dll | AxEIBNETLib.cs

    (Command Prompt mit „Run as administrator“ C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\AxImp.exe EIBnet.ocx /source

    3)    Neues Windows Forms Application Projekt in Visual C# erstellen

    4)    Rechtsklick auf dem Projekt à Add Reference à Browse à EIBNETLib.dll

    5)    Rechtsklick auf dem Projekt à Add Existing Item à AxEIBNETLib.cs

    6)    Im Code von AxEIBNETLib.cs folgende Zeile eintragen:    [System.ComponentModel.ToolboxItemAttribute(true)]

    7)    Build à in der ToolBox unter [ProjektName Components] haben wir AxEIBnet

    8)    AxEIBnet aus der ToolBox auf unserer Form ziehen  mit Drag&Drop

    9)    Einfach das Steuerelement testen mit zwei Methoden die nicht den Anschluss an die Serielle Schnittstelle nötigen weil ich diese nicht habe J

    Code AxEIBNETLib.cs

    [assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
    [assembly: System.Windows.Forms.AxHost.TypeLibraryTimeStamp("1/30/2008 9:47:38 PM")]
    
    namespace AxEIBNETLib {
        
        
        [System.Windows.Forms.AxHost.ClsidAttribute("{b8b89503-28f6-11d8-b866-00601d21a7ba}")]
        [System.ComponentModel.ToolboxItemAttribute(true)]
        [System.ComponentModel.DesignTimeVisibleAttribute(true)]
        [System.ComponentModel.DefaultEvent("OnReceive")]
        public class AxEIBnet : System.Windows.Forms.AxHost {
            
            private EIBNETLib._DEIBnet ocx;
            
            private AxEIBnetEventMulticaster eventMulticaster;
            
            private System.Windows.Forms.AxHost.ConnectionPointCookie cookie;
            
            public AxEIBnet() : 
                    base("b8b89503-28f6-11d8-b866-00601d21a7ba") {
            }
    
    ..............................................................

     

     

    Code Form1.cs

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                System.Int16 myvar = axEIBnet1.GetVersion();
                textBox1.Text = Convert.ToString(myvar);
                textBox2.Text = Convert.ToString(axEIBnet1.GetBuild());
                
            }
    
        
    
            
        }
    }


     Ich bekomme dann erfolgreich in textBox1 "7" und in textBox2 "2" geschrieben.

    Schau Dir auch die folgende Diskussion an. http://social.msdn.microsoft.com/Forums/de-DE/dotnetframeworkde/thread/ae090833-4a4e-4068-b14c-529f94bb773f

    Die Theorie:

    Windows Forms ActiveX Control Importer-Tool (Aximp.exe) à http://msdn.microsoft.com/de-de/library/8ccdh774(VS.80).aspx

    AxHost-Klasse à http://msdn.microsoft.com/de-de/library/system.windows.forms.axhost.aspx

    Grüße und Erfolg,

    Robert

    Thursday, February 25, 2010 5:20 PM
  • Hallo Harry,

    In diesem Hinweis steht: “ The Visual Studio Express Editions, such as Visual C# Express Edition, do not support optimization for a specific CPU type. This is supported only in the full Visual Studio product.“

    http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx

    Grüße,

    Robert

    Thursday, February 25, 2010 5:51 PM
  • Hallo Robert,

    mit Einschalten der Konfiguration ist das aber durchaus möglich.
    Hier gerade noch für VC# 2008 Express SP1 geguckt.

    Bei einem neuen Projekt muß dazu die x86 Konfiguration nur explizit
    im Konfiguration Manager (unter Erstellen) anlegen.

    Um sicher zu gehen: Erkennbar daran, dass man im Build Fenster
    csc.exe mit dem Parameter /platform: x86 ausgeführt wird.

    Und identisches nehme ich für VB 2008 Expres an,
    was ich hier nicht installiert habe.
    http://msdn.microsoft.com/de-de/library/8ck8e1y2.aspx

    Gruß Elmar
    Thursday, February 25, 2010 7:37 PM
  • Hallo Elmar,

    Du hast völlig Recht.

    Habe das Optimieren einer Anwendung für einen bestimmten CPU-Typ auch in der Express Edition erfolgreich aktiviert durch Einschalten der Konfiguration (VC# 2008).

    Der Hinweis muss man dann von dieser englischen Seite raus J (http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx)

    Grüße und Danke,

    Robert

    Friday, February 26, 2010 8:26 AM
  • Hallo Robert,

    ich gehe davon aus, dass die Ergänzung, um die es sich ja handelt,
    entstanden ist, weil derjenige ebenfalls das Häkchen nicht gefunden hat ;-)

    Eine Korrektur wäre schön, dann mit entsprechendem Hinweis auf z. B.:
    How to: Create and Edit Configurations

    Gruß Elmar

    Friday, February 26, 2010 12:58 PM
  • Hallo zusammen,

    Bin auch auf die Fehlermeldung gestoßen (Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))) indem ich das ganze aus Visual Studio 2008 mache (AnyCPU) unter Windows Server 2008 R2 Enterprise 64-bit Operating System. Wie ich auf x86 den Build ausführe, klappt das gleich erfolgreich.

    Na ja, habe noch dass gelesen und jetzt bin ich im klaren was da passiert ist. (Danke Elmar und Thorsten)

    http://visualstudiohacks.com/articles/visual-studio-net-platform-target-explained/

    Grüße,

    Robert

    Friday, February 26, 2010 1:16 PM
  • Hi Robert! Vielen Dank erstmal für die Mühe!!!

    Ich habe Deine Schritte alle 1:1 nachvollzogen, das SDK runtergeladen, das ocx zerhaächselt, in ein neues c# eingefügt nach Deiner Anleitung,

    Button angelegt mit:

    private void button1_Click(object sender, EventArgs e)
            {
                Boolean EIBCon;
                EIBCon = axEIBnet1.Connect("127.0.0.1");

            }

    (JETZT FINDET "DAT KERLSCHE" :-) wenigstens seine Methoden!)

    ging alles gut bis zum debuggen:

    und zwar gibt´s die gelbe Linie Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    bei *** im Form1 Designer :


     this.axEIBnet1.Enabled = true;
                this.axEIBnet1.Location = new System.Drawing.Point(497, 283);
                this.axEIBnet1.Name = "axEIBnet1";
                this.axEIBnet1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axEIBnet1.OcxState")));
                this.axEIBnet1.Size = new System.Drawing.Size(100, 50);
                this.axEIBnet1.TabIndex = 4;
                //
                // Form1
                //
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(628, 363);
                this.Controls.Add(this.axEIBnet1);
                this.Controls.Add(this.textBox2);
                this.Controls.Add(this.textBox1);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
    ***       ((System.ComponentModel.ISupportInitialize)(this.axEIBnet1)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();

            }

            #endregion

            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.TextBox textBox2;
            private AxEIBNETLib.AxEIBnet axEIBnet1;
        }



    Viele Grüße, Harry
    Saturday, February 27, 2010 12:59 AM
  • ...und wenn man müde ist, sollte man die Fr... halten :-).... Naja, heute morgen, ausgeschlafen, einfach mal noch die CPU richtig eingestellt im c# - und geht!!!!

    CPU Auswahl im c# Express 2008 und Konfig wie folgt (in Klammern Deutsch für alle nicht-Insulanisch-sprechenden :-) ):

    From the menu: Tools >> Options. (DEUTSCHE VERSION:Vom Menü anklicken EXTRAS >> Optionen)
    In the Option Window check the "Show all settings" option (links unten in der Ecke, leicht zu überlesen im Fenster "Alle Einstellungen anzeigen")
    In the option list on the right: Projects and solutions >> General. (Projekte und Projektmappen >> Allgemein)
    Check the option "Show advanced build configurations" and then OK. (Haken bei "Erweiterte Buildkonfiguration anzeigen")
    Now you should have in the menu bar the platform and CPU listboxes enabled.
    In the CPU list choose "Configuration manager". (In der CPU Liste im Editor oben auf "Konfigurationsmanager" klicken)
    In the "Configuration manager" window choose <New> in the Platform column.  (Bei Aktive Projektmappenplattform <neu> auswählen)
    In the "New project platform" window choose x86 or another CPU type (x64/Itanium). (x86 auswählen)
    Now you can compile your project for the selected platform. (jetzt kannst Du Dein Projekt compilieren für die ausgewählte Plattform)

    Danke nochmals an ALLE, Spezialgrüße an Robert für den zielführenden Beitrag!!!
    Saturday, February 27, 2010 12:31 PM