Probleme mit eigener Komponente (ActiveX)



  • Hi,

    ich habe eine eigene Komponente (ActiveX) erstellt.

    1. Ich habe zwei __properties, die je einen eigenen enum bekommen. Teste ich die Komponente mit dem ActiveX-Testcontainer tstcon32 und rufe eine der beiden Funktionen auf, gebe ich dort statts den enum den entsprechenden int ein. Methode funktioniert.
    2. Ich habe jetzt ewig gebraucht, um diese 'fertig getestete' Komponente in den BCB zu bekommen. Ich habe keine Ahnung warum. Komponente -> ActiveX importieren... -> hinzugefügt in ein eigenes, neues Package, in der _ProjOCX.h
    // OCX-Proxy benutzt werden static int          EventDispIDs[8];
    
    durch:
        // OCX-Proxy benutzt werden
      static int          EventDispIDs[8];
    

    ersetzt und fertig. ActiveX-Komponente taucht nun in der Palette auf.
    Zieh ich die nun in einem neuen, leeren Projekt in die Form, kommt folgender Fehler:

    m_dwRef == 0 @ c:\programy\fh\borland\cbuilder6\include\atl\atlcom.h/2300
    Press [Y]es to terminate, [N]o to continue and [C]ancel to Debug
    

    Ich hatte den Fehler auf 2 Systemen. Auf dem einen hab ich es nach... 4 Stunden oder so hinbekommen. Ich habe aber keine Ahnung, was ich gemacht habe... x-mal die Komponente aus dem import und dem Projects-Ordner gelöscht und wieder hinzugefügt wie oben... jetzt kann ich die Komponente verwenden... zumindest auf einem System... auf dem andren habe ich zwar hoffentlich das Gleiche gemacht, aber der Fehler bleibt... trotz Löschen und Importieren.

    1. Wieder zu 1 und weiter... Die Komponente ist nun auf der Form und die Eigenschaften werden im OI angezeigt. Ändere ich dort eine __property, die einen Int erwartet, nimmt sie den neuen Wert brav an. Ändere ich nun einen der beiden Werte, die einen enum erwarten, kommt folgende Meldung:
    Wert muß zwischen 0 und -1 liegen.
    

    Ich dreh am Rad. Zur Laufzeit kann ich einen Int > 0 übergeben. Der Setter nimmt ihn auf und arbeitet damit weiter. Nur eigentlich hätten die beiden Typ- und Positions-Properties published sein sollen, damit gerade zur Laufzeit keine Änderung vorgenommen werden kann. Wie gut, dass ich das jetzt doch noch ändern kann, sonst könnte ich gar nichts machen.
    In der .tlb sind die enums auch aufgeführt:

    [
      uuid(A354E14D-A445-49BF-BC3D-89ABD31E5277), 
      version(1.0)
    ]
    typedef enum tageLSAtype
    {
      threeFieldedCarAll = 0, 
      threeFieldedCarStraight = 1, 
      threeFieldedCarRight = 2, 
      threeFieldedCarLeft = 3
    } eLSAtype;
    

    und weiter oben auf verwendet:

    [
    propput, 
    id(0x00000016)
    ]
    HRESULT _stdcall LSAtype([in] eLSAtype Value /*Warnung: Strukturname kann nicht überprüft werden: */ );
    

    Jetzt wäre es a) schön, wenn ich im OI einen int-Wert eingeben könnte, damit man zur Entwurfszeit schon was sehn und layouten kann und b) wäre es glatt noch viel schöner, wenn der enum als Dropdown zur Auswahl stehen würde.

    Diese Änderungen, welche mich sowieso interessieren, setzen voraus, dass mir jemand Fehler(umstand) 2 erläutern kann, damit ich die (fehlerhafte) Komponente rausschmeißen kann und die neue schnell rein bekomm und dann verwenden kann. Den atl-Fehler hab ich irgendwie auch nicht in Google mit BCB in Verbindung bringen können (oder ich war nur zu doof, die richtigen Schlüsselworte einzugeben).

    Ok, soweit mein Roman...... diese Studienarbeit raubt mir noch den letzten Nerv, dabei fand ich die Idee, ne Komponente zu machen, mit der ich weiter entwickeln kann, ganz toll... 😞

    schöne Nacht noch
    Florian


Anmelden zum Antworten