ActiveX via VS 2020 nicht mehr registriert ?



  • @Cardiac

    Das ist in allen gängigen Entwickler und Nutzumgebungen enthallten, es ist natürlich nicht auf Webseiten .

    Wo kann man eine Klasse im VS für das Projekt aus einem ActiveX erzeugen lassen, der Klassen Assistent zeigt keine Active-X Klassen Erzeugung mehr an

    Es wird in Office verwendet bei national Instrument und zahlreichen anderen Oberflächen.

    Wie sollte es sonnst ersetzt worden sein ? Und von was ?



  • VS22 ist 64bit, ich vermute mal stark das dein OCX 32bit ist, entsprechend kann VS damit nichts anfangen.



  • @Cardiac sagte in ActiveX via VS 2020 nicht mehr registriert ?:

    h vermute mal sta

    Also ich es macht es auch unter 64 bit. Nur kann ich nicht finden wo der klassenwizzard aus der typelib *.tlb die *.cpp und die *.h erzeugt, die anderen Control laufen auch wunderbar lassen sich kompilieren und registrieren.

    Wie also aus *.ocx Bzw. *.tlb die Klassen für den Wrapper erzeugen ?

    War früher über den Klassen -Wizzard möglich, im Dialog Editor kann man auch das ActiveX einklicken aber die mir fehlt die Klassenerzeugung



  • Wird auch bei Microsoft angezeigt, aber wie bekommt man diesen Dialog ?

    https://learn.microsoft.com/en-us/cpp/ide/adding-a-class-from-an-activex-control-visual-cpp?view=msvc-170#add-class-from-activex-control-wizard

    Ich kann Ihn nicht hervorbringen ...



  • @Cardiac sagte in ActiveX via VS 2020 nicht mehr registriert ?:

    VS22 ist 64bit, ich vermute mal stark das dein OCX 32bit ist, entsprechend kann VS damit nichts anfangen.

    Quatsch. VS ruft zum Registrieren ein Commandline-Tool auf. Da ist es völlig Schnuppe ob die COM DLL 32 oder 64 Bit hat.



  • @Achromat
    Also ich bin jetzt verwirrt. Willst du ein ActiveX Control mit VS 2022 implementieren, oder willst du ein bestehendes in eine MFC Anwendung einbinden?

    Falls das 2., vielleicht hilft diese Antwort: https://stackoverflow.com/a/73878533/454519

    As for now, VS 2019 does not have "Add class from typelib" option at project context menu. Instead, you need to "Add"->"New Item..." and find "MFC Class from Typelib"



  • @hustbaer sagte in ActiveX via VS 2020 nicht mehr registriert ?:

    irrt. Willst du ein

    Hallo

    Ich entwickle ActiveX Controls, und will sie auch einbinden können : Zb. in Excel oder in eigene Sachen, ist auch kein Probleme habe
    ein ganzes Set von Controls- Aber kürzlich habe ich ein neues erstellt, alles Wunderbar, als ich das jedoch im VS in einer Dialogbasierenden
    Anwendung integrieren wollte, viel auf, das der Klassenassistent keine Möglichkeit mehr bietet den "Wrapper" aus der *.TLB zu erzeugen so das
    ich eine CPP Und H "Hülse" bekomme die ich zum instanziieren des Controls benötige und um dessen Prototypen im *.cpp zu haben.

    Dieser fehlende Wizard (Klasse aus ActivX Erzeugen) war immer Bestandteil über rechte Menu PopUp -Maustaste "Classes from ActiveX" zu erzeugen.

    Die erzeugten hießen dann zb : CDPatConnect.h und definierten die Funktionen des Controls.

    Hier Beispiel einer vom Wizard erzeugten Header Datei :

    class CDPatConnect : public CWnd
    {
    protected:
    	DECLARE_DYNCREATE(CDPatConnect)
    public:
    	CLSID const& GetClsid()
    	{
    		static CLSID const clsid
    			= { 0x72C4550A, 0x1125, 0x4B58, { 0x80, 0x2C, 0x94, 0x93, 0x77, 0xD8, 0x9D, 0xBB } };
    		return clsid;
    	}
    	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
    						const RECT& rect, CWnd* pParentWnd, UINT nID, 
    						CCreateContext* pContext = NULL)
    	{ 
    		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); 
    	}
    
        BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
    				UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
    				BSTR bstrLicKey = NULL)
    	{ 
    		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
    		pPersist, bStorage, bstrLicKey); 
    	}
    
    public:
    
    public:
    
    	long Connect(LPCTSTR Ip, long Port)
    	{
    		long result;
    		static BYTE parms[] = VTS_BSTR VTS_I4 ;
    		InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, parms, Ip, Port);
    		return result;
    	}
    	long Disconnect()
    	{
    		long result;
    		InvokeHelper(0x2, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    		return result;
    	}
    	long Command(LPCTSTR ComTxt)
    	{
    		long result;
    		static BYTE parms[] = VTS_BSTR ;
    		InvokeHelper(0x3, DISPATCH_METHOD, VT_I4, (void*)&result, parms, ComTxt);
    		return result;
    	}
    	long GetInfo(long Id)
    	{
    		long result;
    		static BYTE parms[] = VTS_I4 ;
    		InvokeHelper(0x4, DISPATCH_METHOD, VT_I4, (void*)&result, parms, Id);
    		return result;
    	}
    	long Reset(long Status)
    	{
    		long result;
    		static BYTE parms[] = VTS_I4 ;
    		InvokeHelper(0x5, DISPATCH_METHOD, VT_I4, (void*)&result, parms, Status);
    		return result;
    	}
    
    
    };
    

    .
    .
    MS Sagt es gibt den Dialog noch : https://learn.microsoft.com/en-us/cpp/ide/adding-a-class-from-an-activex-control-visual-cpp

    Aber wo ? Man kann ihn nicht hervorbringen.
    Danke für Hinweise !
    Gruß aus Berlin



  • Also bei mir geht das so:

    • Rechtsklick auf das Projekt im Solution Explorer
    • Add -> New Item
    • Falls du in der "Compact View" bist: Show All Templates
    • Links auf Installed > Visual C++ > MFC gehen
    • Rechts MFC Class From ActiveX Control auswählen
    • Name eintragen
    • Add

    Und dann solltest du den Dialog sehen wo du die TLB auswählen kannst.



  • @hustbaer sagte in ActiveX via VS 2020 nicht mehr registriert ?:

    Show All Templates

    MAN Alter ! Toll, danke für die Info warum habe ich es 10h lang nicht finden können. omg.. Peinlich..

    https://www.twitch.tv/kahnsoft



  • YW 🙂


Anmelden zum Antworten