Announcement

Collapse
No announcement yet.

Mehrdeutigkeit AcitveX (genau machen ??)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrdeutigkeit AcitveX (genau machen ??)

    Hallo,

    ich habe eine AcitveX Bibliothek und Form eingebunden.

    nun habe ich ein Klassenproblem und zwar habe ich

    1x TDevices (HWND ParentWindow)
    1x TDevices (TComponent*Owner)

    unter den Klassen aufgeführt.

    Das führt dann zu folgenden Probelm



    [C++ Fehler] DevicesImpl1.cpp(615): E2015 Mehrdeutigkeit zwischen 'Devices' und 'Kundendevices_tlb:evices'

    Code:
    	// eigene IDevices Attribute angelegt in der KundenDevices.tlb 
    
    STDMETHODIMP TDevicesImpl::GetPCTyp(BSTR DeviceTyp)           
    { 
      try 
      { 
        Devices->Label1->Caption=DeviceTyp; 
      } 
      catch(Exception &e) 
      { 
        return Error(e.Message.c_str(), IID_IDevices); 
      } 
      return S_OK; 
    };

    Da Devices ein mal als Parent vorkommt weiß er nicht vom welchen er beziehen soll. Wie mache ich ihn klar das das Label1 im ParentWindow liegt ?

  • #2
    ParentWindow::devices->Label1->Caption=DeviceTyp;
    Christian

    Comment


    • #3
      Leider nicht dann kommt bei mir

      [C++ Fehler] DevicesImpl1.cpp(617): E2090 Qualifizierer 'ParentWindow' ist kein Name einer Klasse oder einer Struktur


      Hier nochmal da wo beide innitiert werden

      __fastcall TDevices(HWND ParentWindow);
      __fastcall TDevices(TComponent* AOwner): TActiveForm(AOwner) {};

      Comment


      • #4
        Ok, es muss eindeutig in der Form

        Klasse::devices

        gemacht werden. Ggf.

        Kundendevices_tlb::device....

        Je nach den in welcher deiner Klasse das wie impelementiert wurde
        Christian

        Comment


        • #5
          Hmm... leider kenn ich mich nicht so gut aus :-P

          Auszug aus DevicesImpl1.h
          Code:
          class TDevices : public TActiveForm
          {
          __published:	// Von der IDE verwaltete Komponenten
                  TButton *Button1;
                  TLabel *Label1;
                  TGroupBox *GroupBox1;
                  TLabel *Label2;
                  TEdit *Edit1;
                  TLabel *Label3;
                  TEdit *Edit2;
                  TLabel *Label4;
                  TEdit *Edit3;
                  TGroupBox *GroupBox2;
                  TLabel *Label5;
                  TCheckBox *CheckBox1;
                  TLabel *Label6;
                  TEdit *Edit4;
                  TGroupBox *GroupBox3;
                  TLabel *Label7;
                  TEdit *Edit5;
                  TLabel *Label8;
                  TEdit *Edit6;
                  TGroupBox *GroupBox4;
                  TLabel *Label9;
                  TEdit *Edit7;
                  TEdit *Edit8;
                  TEdit *Edit9;
                  TEdit *Edit10;
                  TLabel *Label10;
                  TLabel *Label11;
                  TLabel *Label12;
                  TLabel *Label13;
                  TCheckBox *CheckBox2;
                  TGroupBox *GroupBox5;
                  TLabel *Label14;
                  TLabel *Label15;
                  TLabel *Label16;
                  TLabel *Label17;
                  TLabel *Label18;
                  TEdit *Edit11;
                  TEdit *Edit12;
                  TEdit *Edit13;
                  TEdit *Edit14;
                  TCheckBox *CheckBox3;
                  TGroupBox *GroupBox6;
                  TLabel *Label19;
                  TLabel *Label20;
                  TLabel *Label21;
                  TEdit *Edit15;
                  TEdit *Edit16;
                  TEdit *Edit17;
                  TLabel *Label22;
                  TMemo *Memo1;
                  TCheckBox *CheckBox4;
                  TLabel *Label23;
                  TGroupBox *GroupBox7;
                  TMemo *Memo2;
                  TLabel *Label24;
                  void __fastcall Button1Click(TObject *Sender);
          private:	// Anwender-Deklarationen
          public:		// Anwender-Deklarationen
              __fastcall TDevices(HWND ParentWindow);
              __fastcall TDevices(TComponent* AOwner): TActiveForm(AOwner) {};
          };
          
          class ATL_NO_VTABLE TDevicesImpl:
            VCLCONTROL_IMPL(TDevicesImpl, Devices, TDevices, IDevices, DIID_IDevicesEvents)
          {
            void __fastcall ActivateEvent(TObject *Sender);
            void __fastcall ClickEvent(TObject *Sender);
            void __fastcall CreateEvent(TObject *Sender);
            void __fastcall DblClickEvent(TObject *Sender);
            void __fastcall DeactivateEvent(TObject *Sender);
            void __fastcall DestroyEvent(TObject *Sender);
            void __fastcall KeyPressEvent(TObject *Sender, char &Key);
            void __fastcall PaintEvent(TObject *Sender);
          public:
          
            void InitializeControl()
            {
              m_VclCtl->OnActivate = ActivateEvent;
              m_VclCtl->OnClick = ClickEvent;
              m_VclCtl->OnCreate = CreateEvent;
              m_VclCtl->OnDblClick = DblClickEvent;
              m_VclCtl->OnDeactivate = DeactivateEvent;
              m_VclCtl->OnDestroy = DestroyEvent;
              m_VclCtl->OnKeyPress = KeyPressEvent;
              m_VclCtl->OnPaint = PaintEvent;
            }
          
          // Die Einträge der COM-Liste deklarieren die Schnittstellen, die Ihr Objekt (durch
          // QueryInterface) darstellt. CComRootObjectEx::InternalQueryInterface gibt nur
          // Zeiger für Schnittstellen inder COM-Liste zurück. VCL-Lelemente, die als OCXes
          // dargestellt sind, besitzen eine Minimalmenge an Schnittstellen, die vom Makro
          // VCL_CONTROL_COM_INTERFACE_ENTRIES definiert sind. Fügen Sie andere Schnittstellen, die
          // die von Ihrem Objekt unterstützt werden, mit zusätzlichen Makros COM_INTERFACE_ENTRY[_xxx] ein.
          //
          BEGIN_COM_MAP(TDevicesImpl)
            VCL_CONTROL_COM_INTERFACE_ENTRIES(IDevices)
          END_COM_MAP()
          
          
          
          // Die PROPERTY-Liste speichert Eigenschaftsbeschreibungen, -DISPIDs,
          // Eigenschaftsseiten-CLSIDs und IDispatch-IIDs. Sie sollten 
          // IPerPropertyBrowsingImpl, IPersistPropertyBagImpl, IPersistStreamInitImpl
          // und ISpecifyPropertyPageImpl verwenden, um die Informationen in der
          // Eigenschaftsliste zu nutzen.
          //
          // HINWEIS: Der BDB-Experte pflegt die Tabelle PROPERTY_MAP *NICHT*. Sie 
          //          müssen Einträge manuell hinzufügen oder entfernen.
          //
          BEGIN_PROPERTY_MAP(TDevicesImpl)
            // PROP_PAGE(CLSID_DevicesPage)
          END_PROPERTY_MAP()
          
          /* DECLARE_VCL_CONTROL_PERSISTENCE(CppClass, VclClass) wird bei VCL-
           * Elementen für Persistenz via VCL-Streaming-Mechanismus und via ATL-Mechanismus benötigt.
           * Das Makro fügt statische IPersistStreamInit_Load und IPersistStreamInit_Save-
           * Methoden in Ihre Implementierungs-Klasse ein, indem es die Methoden in IPersistStreamImpl überschreibt. 
           * Dieses Makro muss manuell undefiniert oder entfernt werden, wenn Sie nach C++Builder 4.0 portieren. */
          
          DECLARE_VCL_CONTROL_PERSISTENCE(TDevicesImpl, TDevices);
          
          // Das Makro DECLARE_ACTIVEXCONTROL_REGISTRY deklariert eine statische
          // Routine zur Registrierung grundlegender Informationen über Ihr Element.
          // Die vom Makro erwarteten Parameter sind  ProgId & ToolboxBitmap-ID 
          // Ihres Elements.
          //
          DECLARE_ACTIVEXCONTROL_REGISTRY("KundenDevices.Devices", 1);
          
          protected: 
            STDMETHOD(_set_Font(IFontDispPtr* Value));
            STDMETHOD(get_Active(TOLEBOOL* Value));
            STDMETHOD(get_AutoScroll(TOLEBOOL* Value));
            STDMETHOD(get_AutoSize(TOLEBOOL* Value));
            STDMETHOD(get_AxBorderStyle(TxActiveFormBorderStyle* Value));
            STDMETHOD(get_BorderWidth(long* Value));
            STDMETHOD(get_Caption(BSTR* Value));
            STDMETHOD(get_Color(::OLE_COLOR* Value));
            STDMETHOD(get_Cursor(short* Value));
            STDMETHOD(get_DoubleBuffered(TOLEBOOL* Value));
            STDMETHOD(get_DropTarget(TOLEBOOL* Value));
            STDMETHOD(get_Enabled(TOLEBOOL* Value));
            STDMETHOD(get_Font(IFontDispPtr* Value));
            STDMETHOD(get_HelpFile(BSTR* Value));
            STDMETHOD(get_KeyPreview(TOLEBOOL* Value));
            STDMETHOD(get_PixelsPerInch(long* Value));
            STDMETHOD(get_PrintScale(TxPrintScale* Value));
            STDMETHOD(get_Scaled(TOLEBOOL* Value));
            STDMETHOD(get_Visible(TOLEBOOL* Value));
            STDMETHOD(get_VisibleDockClientCount(long* Value));
            STDMETHOD(set_AutoScroll(TOLEBOOL Value));
            STDMETHOD(set_AutoSize(TOLEBOOL Value));
            STDMETHOD(set_AxBorderStyle(TxActiveFormBorderStyle Value));
            STDMETHOD(set_BorderWidth(long Value));
            STDMETHOD(set_Caption(BSTR Value));
            STDMETHOD(set_Color(::OLE_COLOR Value));
            STDMETHOD(set_Cursor(short Value));
            STDMETHOD(set_DoubleBuffered(TOLEBOOL Value));
            STDMETHOD(set_DropTarget(TOLEBOOL Value));
            STDMETHOD(set_Enabled(TOLEBOOL Value));
            STDMETHOD(set_Font(IFontDispPtr Value));
            STDMETHOD(set_HelpFile(BSTR Value));
            STDMETHOD(set_KeyPreview(TOLEBOOL Value));
            STDMETHOD(set_PixelsPerInch(long Value));
            STDMETHOD(set_PrintScale(TxPrintScale Value));
            STDMETHOD(set_Scaled(TOLEBOOL Value));
            STDMETHOD(set_Visible(TOLEBOOL Value));
            STDMETHOD(GetPCTyp(BSTR DeviceTyp));
          };
          Wenn ich die Kundendevices_tln:evices nehme macht er ein Fehler Ungültige Verwendung von Typedef.


          Ich weiß irgendwie nicht weiter. Habe keine Ahnung was ich da nun vorschreiben muss um den das klar zu machen. Das kuriose ist ja auch das wenn ich z.b
          Devices-> eingebe dann poppen die Objekte schon auf die auf der Form liegen warum aber macht der Compiler da Probleme

          Hier nochmal Auszug aus der KundenDevices.cpp

          Code:
          #include "DevicesImpl1.h"
          #pragma package(smart_init)
          USERES("KundenDevices.res");
          USEUNIT("KundenDevices_ATL.cpp");
          USETLB("..\..\KundenDevices.tlb");
          USEUNIT("KundenDevices_TLB.cpp");
          USEFORM("DevicesImpl1.cpp", Devices); /* TActiveForm: File Type */ /* Devices: CoClass */

          Achja und nochmal hier ein Auszug aus der DevicesImpl1.cpp
          Da steht der wichtige Kram drinne ganzen Buttonaktionen
          und die STDMETHOD von mir


          Code:
          #include <vcl.h>
          #pragma hdrstop
          #include <atl\atlvcl.h>
          
          #include "DevicesImpl1.h"
          //---------------------------------------------------------------------------
          #pragma package(smart_init)
          #pragma resource "*.dfm"
          TDevices *Devices;
          //---------------------------------------------------------------------------
          __fastcall TDevices::TDevices(HWND ParentWindow)
                  : TActiveForm(ParentWindow)
          {
          }
          //---------------------------------------------------------------------------

          Comment


          • #6
            TDevices::ParentWindow->Devices->Label1->Caption=DeviceTyp;

            So klappt es auch nicht

            Comment


            • #7
              Download der Programmierung

              So ich stelle das ganze einfach mal on... Vielleicht guckt sich das ja mal einer an und sieht was ich machen muss

              Comment

              Working...
              X