Benutzer mit den meisten Antworten
OCX einbinden in Vb 2010

Frage
-
Wie kann ich eine in Vb6 geschriebene (und gut laufende) OCX in Vb2010 einbinden Rechtsklick Toolbox und anschließendes Placieren auf Form1 verursacht die Aufforderung, sicherzustellen, dass das ActiveX ordnungsgemäß registriert wurde. (Das wurde es mit üblicher Bestätigung unter Vista mit Administratorrechten, auch Vb2010 wurde als Administrator gestartet) und es erscheinen in der Fehlerliste die drei Warnungen: 1. 'AxImp.exe wurde mit Fehlercode 1163019603 beendet' 2.'Die Wrapperassembly für die Typbibliothek 'Ax.....' wurde nicht gefunden' und 3. Die Komponente 'Ax....' auf die verwiesen wurde, wurde nicht gefunden'
Antworten
-
Hallo Christian,
zu Deinem StdOle Problem, siehe What does stdole.dll do?
und (neben anderen dort): Convert stdole.StdPicture to System.Drawing.IconUnter normalen Umständen sollte sich aber im GAC (%WINDIR%\Assembly)
sowie unter %ProgramFiles%\Microsoft.NET\Primary Interop Assemblies zu finden sein.Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Samstag, 4. September 2010 14:53
-
Hallo,
muss doch noch einmal nachfragen:
Dank der Hilfe hier habe ich meine OCX soweit, dass sie sich in ein neues Projekt über den beschrieben Weg des Rechtsklick auf Toolbox ohne Weiteres einfügen läßt.
Nun wird es aber gelegentlich notwendig, die OCX zu ändern. Auch die geänderten Fassungen lassen sich in ein neues Projekt problemlos einbinden, nicht aber in einem bestehenden Projekt gegen die dort vorhandene ältere Version austauschen. Auch nach Entferenen der Verweise, die automatisch beim Ziehen von der Toolbox auf die Form erzeugt wurden, nicht. Es erscheint wieder - wohlgemerkt bei der neueren OCX, die sich in neues Projekt problemlos einbinden läßt - der vermaledeite Hinweise: ActiveX nicht ordnungsgemäß registriert.
Wie kriege ich es hin, die offenbar bestehendeSpuren einer wieder entfernten OCX in einem bestehen Projekt restlos zu beseitigen, so daß es jungfräulich in Bezug auf die neuere OCX-Fassung ist?
Viele Grüsse
Christian
- Als Antwort markiert Robert Breitenhofer Samstag, 4. September 2010 14:52
Alle Antworten
-
Hallo ChristianSp,
Schau Dir mal die folgenden Links an. Vielleicht können sie Dir weiter helfen.
PRB: Cannot Add ActiveX Control to Toolbox
AxImp: http://msdn.microsoft.com/en-us/library/8ccdh774(VS.80).aspx
TlbImp: http://msdn.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx
http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/0a4dd466-64a7-4018-83c9-dbc2bdac20f1#2c58868e-ee4f-472e-8431-ca6d32f374dc (insbesondere die Zeile [System.ComponentModel.ToolboxItemAttribute(true)] zu beachten)
Aximp.exe (Windows Forms ActiveX Control Importer) (insbesondere die Option /source zu beachten)
Grüße,
Robert
-
Hallo Robert,
vielen Dank für die schnelle Antwort: sie hat mir allerdings nicht recht weitergeholfen. Das mag nun daran liegen, dass ich alles andere als ein Profi bin. Jedenfalls hätte ich gern versucht Aximp selbst aufzurufen (die Toolbox tut das ja offenbar automatisch beim Versuch des Ziehens auf Form1) Ich hab sie aber als ausführbare Datei gar nicht gefunden.
Mein Bestreben war (und ist, oder muss ichs knicken?), ein recht umfangreiches VB6-Projekt, dessen Grafikteil ich in einer OCX sozusagen 'gekapselt' hatte, in VB2010 neu zu schreiben, den als OCX fertigen Grafikteil aber (zumindet zunächst) weiterzunutzen. Hatte gehofft, dabei step by step das neue VB zu lernen. Nun frag ich mich gleich zu Beginn: liegts an meiner OCX (die sich in andere VB6-Projekte problemlos einbinden lässt), oder mach ich in VB2010 was falsch.
Viele Grüße
Christian
-
Hallo ChristianSp,
Ich hab sie aber als ausführbare Datei gar nicht gefunden.
Du möchtest sagen dass die Datei AxImp.exe gar nicht auf Deinem Rechner ist?
Welche Edition von Visual Basic 2010 (Express? Full?) verwendest Du? Welches Betriebssystem? 32 oder 64 bit?
Grüße,
Robert
-
Du möchtest sagen dass die Datei AxImp.exe gar nicht auf Deinem Rechner ist?
Hallo Robert,
jedenfalls für mich ausführbar (die Toolbox hat sie ja offenbar - allerdings mit o.g. Fehlercode- ausgeführt) habe ich AxImp nicht finden können. Aufgerufen in 'Ausführen' kommt die Meldung 'AxImp konnte nicht gefunden werden......' (Die gleiche Meldung erscheint auch, wenn ich eine entsprechende .BAT als Administrator laufen lasse)
Ich benutze Vista Business mit SP2 32 bit , Visual Basic nutze ich als free download, also in der Express-Version.
Danke, dass Du dich kümmerst.
Viele Grüsse
Christian
-
Hallo Christian,
AxImp und die anderen .NET Framework Tools sind Teil vom Windows SDK
ISO für die aktuelle Version wäre: Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO)und zu finden üblicherweise unter "%ProgramFiles%\Microsoft SDKs\Windows\<Version>\bin
Da bei Express die spezielle Visual Studio Kommandozeile fehlt, mußt Du entweder
den vollen Pfad angeben, z. B.:"%ProgramFiles%\Microsoft SDKs\Windows\V7.1\bin\aximp.exe"
oder das Binärverzeichnis in die PATH Angabe aufnehmen.
Garantieren dass Du damit mehr Erfolg haben wirst, kann ich Dir nicht.
Achte darauf, dass alle von der OCX referenzierten DLLs (sofern dort weitere eingebunden werden)
verfügbar sind.Gruß Elmar
-
Hallo Elmar,
vielen Dank. Ich habe AxImp gefunden. Ich kann sie aber weder als .bat mit Administratorrechten noch in 'Ausführen' starten, es erscheint:Zugriff verweigert.
Ist denn 'normalerweise' der Rechtsklick auf Toolbox (der bei mir ja die AxImp startet, aber mit Fehlercode 1163019603 beendet: kennt jemand die Bedeutung?) der richtige Weg? Oder mach ich irgendetwas Grundlegendes falsch? Fehlen Schritte/Verweise vorher/hinterher? Ich suche eine kurze Anleitung, wie man 'normalerweise' eine OCX einbindet. Oder ist das anfängertypisch naiv?
Viele Grüße
Christian
-
Hallo Christian,
nein, ein Anfängerproblem ist das eher nicht.
Du solltest bereits eine Eingabeforderung mit Administratorrechten öffnen,
siehe auch den Abschnitt "Wichtig" in den .NET Framework Tools .Um das Problem einzukreisen und herauszufinden, ob es an Deinem OCX
oder evtl. ein Rechteproblem ist, erstelle Dir ein separates Minimal-OCX
(mit einer simplen Komponente).Kopiere das OCX Dateien in ein beschreibbares Verzeichnis.
Ggf. registriere es noch einmal via regsvr32 (http://support.microsoft.com/kb/249873 )Zum Rest:
Der Fehlercode dürfte allgemeiner Art sein, eine Google Suche findet nur wenig.
"-1163019603" => &Hbaadbaad läßt ein Zahlenspiel vermuten "ba(a)d ba(a)d",
wobei das Programm auf etwas nicht Vorhergesehenes stösst.Was das Hinzufügen zur Toolbox angeht, ist nichts weiter zu beachten.
Ich denke nicht, dass Du dort was falsch gemacht haben kannst.
In der Theorie gilt: auswählen und gut ist (aber in der Praxis klappt es nicht immer ;-(Das Hinzufügen eines allgemeinen Verweises geht zudem über die Projekteinstellung:
Seite "Verweise", Projekt-Designer (Visual Basic)
und dann Gewusst wie: Hinzufügen oder Entfernen von Verweisen in Visual Studio
dort dann die Registerkarte "Durchsuchen" und Dein OCX auswählen.
(was aber für nicht sichtbare Komponenten gilt).Gruß Elmar
-
Hallo Robert,
Du meinst diese Schritte?
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
Sei mir nicht böse, wenn das für mich ein bisschen kompliziert klingt.
Bin gerade dabei, meine OCX Schritt für Schritt neu aufzubauen und einzubinden. Dabei bin ich z.B. darauf gestossen, dass offenbar der Typ 'StdPicture' nicht mehr unterstützt wird. Ich kriege den Hinweis, dass aufgrund eines indirekten Verweises auf die eingebettete Interopassembly 'stdole' ein Verweis auf diese assembly aus AxInterop.meineocx und Interop.meineocx neu erstellt wurde. Gegebenenfalls solle ich für beide assembly die Eigenschaft 'Interoptypen einbetten' ändern.
War gerade dabei, nachzuforschen, was denn hier ggf. bedeutet, also soll ich, oder soll ich nicht, als ich auf Deine Nachricht stieß.
Viele Grüsse
Christian
-
Hallo Christian,
zu Deinem StdOle Problem, siehe What does stdole.dll do?
und (neben anderen dort): Convert stdole.StdPicture to System.Drawing.IconUnter normalen Umständen sollte sich aber im GAC (%WINDIR%\Assembly)
sowie unter %ProgramFiles%\Microsoft.NET\Primary Interop Assemblies zu finden sein.Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Samstag, 4. September 2010 14:53
-
Hallo Elmar,
nochmals Dank, das StdOle Problem ist keins mehr, der Hinweis auf die Interops (s.o.) erscheint nicht mehr.
Beim 'Durchflöhen' meiner OCX bin ich darauf gestossen, dass
Dim m_Meinevariable as Collection
Public Property Get colMeinevariable() As Collection
Set colMeinevariable = m_Meinevariable
End Propertydas Problem verursacht. VB6 ließ problemlos zu, die innerhalb der OCX so aufgefüllte Collection von außen auszulesen. Das geht also in VB2010 nicht. (mit meinem laienhaften Verstand: woher soll es auch wissen, was für 'Dinger' in der Collection sind)
Warum allerdings die Meldung ActiveX nicht ordnungsgemäß registriert erscheint, wissen die Götter.
Viele Grüße
Christian
-
Hallo,
muss doch noch einmal nachfragen:
Dank der Hilfe hier habe ich meine OCX soweit, dass sie sich in ein neues Projekt über den beschrieben Weg des Rechtsklick auf Toolbox ohne Weiteres einfügen läßt.
Nun wird es aber gelegentlich notwendig, die OCX zu ändern. Auch die geänderten Fassungen lassen sich in ein neues Projekt problemlos einbinden, nicht aber in einem bestehenden Projekt gegen die dort vorhandene ältere Version austauschen. Auch nach Entferenen der Verweise, die automatisch beim Ziehen von der Toolbox auf die Form erzeugt wurden, nicht. Es erscheint wieder - wohlgemerkt bei der neueren OCX, die sich in neues Projekt problemlos einbinden läßt - der vermaledeite Hinweise: ActiveX nicht ordnungsgemäß registriert.
Wie kriege ich es hin, die offenbar bestehendeSpuren einer wieder entfernten OCX in einem bestehen Projekt restlos zu beseitigen, so daß es jungfräulich in Bezug auf die neuere OCX-Fassung ist?
Viele Grüsse
Christian
- Als Antwort markiert Robert Breitenhofer Samstag, 4. September 2010 14:52
-
Hallo Christian,
das Problem ist, dass Visual Basic Classic auf COM ClassId/Interfaces aufbaut.
Sobald sich dort Änderungen ergeben klappt es nicht mehr mit dem Import.Um die Änderungen an den Schnittstellen zu minimieren,
solltest Du binäre Kompatibilität verwenden, siehe
How To Use Project and Binary CompatibilityGanz los wirst Du das Problem damit nicht.
Auch der Weg über Primäre Interop-Assemblys hat seine Grenzen -
wie u. a. die Office PIAs gezeigt haben, wo es von Version zu Version
oft mehr Problem als Lösung war.Ergo: Du solltest Die Übergangsphase so kurz wie möglich halten.
Gruß Elmar