locked
OLE - Klassen RRS feed

  • Frage

  • Hallo zusammen,

    ich hab ne kleine Anwendung geschrieben, die den Kalender benutzt. Den Aufruf des Kalenders habe ich auf nen Button gelegt mit folgendem Code:

    #DEFINE C_CALCAPTION_LOC	"Data Calendar"
    oCalForm = Create('form')
    oCalForm.NewObject("oleCalendar","_olecalendar","_datetime.vcx") 
    
    IF EMPTY(This.parent.beg_datum1.Value)
    	This.parent.beg_datum1.Value = DATE()
    	This.parent.beg_datum1.refresh
    endif
    
    	
    WITH oCalForm.oleCalendar
    	IF EMPTY(This.parent.beg_datum1.Value)
    		.month = MONTH(DATE())
    		.day = DAY(DATE())
    		.year = YEAR(DATE())
    	ELSE
    		.month = MONTH(This.parent.beg_datum1.Value)
    		.day = DAY(This.parent.beg_datum1.Value)
    		.year = YEAR(This.parent.beg_datum1.Value)
    	endif	
    	.date_column = "aus.beg_datum"
    	.RefreshDisplay()
    	.BackColor = THISFORM.BackColor
    	.Visible = .T.
    ENDWITH
    WITH oCalForm
    	.AutoCenter = .T.
    	.BorderStyle = 2
    	.MaxButton = .F.
    	.MinButton = .F.
    	.Height = oCalForm.oleCalendar.Height
    	.Width = oCalForm.oleCalendar.Width
    	.Caption = C_CALCAPTION_LOC
    ENDWITH
    oCalForm.Show(1)
    This.parent.beg_datum1.setfocus
    This.parent.beg_datum1.refresh
    this.SetFocus 
    THISFORM.Refresh
    


    Beim Aufruf des Kelenders erscheint folgende Fehlermeldung:

    OLE-Fehlercode 0x80040154: Klasse nicht registriert

    Die entsprechende VCX (_datetime.vcx) habe ich eingebunden. Auf meinem Entwicklungsrechner läuft alles. Könnte mir jemand einen Tip geben, was ich da falsch mache.

    Umgebung: VFP9 SP1, WinXP Prof, SP3

     

    Vielen Dank im Voraus

    Christoph

    Freitag, 1. Juli 2011 07:50

Alle Antworten

  • Hi Christoph,

    wenn Du mit OCXen arbeitest, dann musst Du diese üblicherweise bei Windows registrieren.

    Damit eine solche OCX auf einem anderen Rechner funktioniert, muss sie natürlich auch auf dem System verfügbar sein.

    Dazu solltest Du die entsprechende OCX Datei auf den Rechner kopieren und mit regsvr32.exe registrieren.

    Am einfachsten geht das, wenn die OCX in Deinem Installationsordner liegt. Dort packst Du dann noch eine kleine BATCH Datei dazu:

    for %P in (*.ocx) do call regsvr32 %P
    
    


    Damit werden dann alle in Verzeichnis liegenden OCXe registriert.

    Arbeitest Du auf einem 64bit System solltest Du der regsvr32 den kompletten SYSWOW64 Pfad (normalerweise C;\windows\syswow64\) voranstellen, damit auch die 32bit Version aufgerufen wird.


    Gruss / Best regards -Tom 010101100100011001010000011110000101001001101111011000110110101101110011
    Freitag, 1. Juli 2011 12:08
  • Hallo Tom,

    erstmal vielen Dank für deinen Tip. Gilt Deine Aussage auch für die _datetime.vcx? bzw. woher weiß ich, welche OCX-Datei registriert werden muß. Ich möchte eigentlich nicht alle pauschal registrieren.

    Gruß

    Christoph

    Freitag, 1. Juli 2011 13:37
  •  

     

    Eine VCX ist immer Foxpro Code. Die muß nicht registriert werden. Die _datetime.vcx bzw. die darin enthalten _olecalendar Klasse nutzt das MS Datepicker OCX control.

    Du benötigst auf dem Zielrechner deswegen noch die MSCOMCT2.OCX Datei. Es ist Dir auch gestattet, diese weiterzugeben, siehe:
    ActiveX Controls Overview - http://msdn.microsoft.com/en-us/library/aa977221(v=vs.71).aspx

    Wenn du das mitgelieferte Installshield verwendest, dann detektiert es solche Verweise auf genutzte OCXe selbst. Aber Du kannst wie Tom sagt das auch in die Hand nehmen. Nur läuft die Registrierung besser während der Installation, weil dann per Definition eines Setups der Prozess gerade die nötigen Rechte hat, Registrierungen vorzunehmen. Im Nachhinein mit einem Batchlauf bist Du darauf angewiesen, daß User sich selbst Adminrechte gegeben haben und ab Vista bist Du bei eingeschalteter Benutzerkontensteuerung (UAC) selbst dann angeschmiert.

    Ich empfehle spätestens bei der Mitinstallation von OCX ein Setup zu generieren. ISE (installshield express) ist dabei eingeschränkt, nicht nur wegen der "Express" Version. Die Version ist von 2006 und kennt daher keine Spezifika von Vista oder gar Win7. Es ist trotzdem möglich damit auszukommen und wie gesagt detektiert es selbsttätig Verweise auf OCXe und COM Server, die Deine EXE benötigt, auch selbst erstellte DLLs. Viele nutzen dennoch Inno Setup als freie und aktuell gehaltene Alternative, darin kann man z.B. solche Registrierungsskripte unterbringen und ausführen lassen.

    Tschüß, Olaf.

     

     


    Sonntag, 3. Juli 2011 12:22
  • Hallo Olaf, hallo Tom,

    hat geklappt. Super. Vielen Dank.

    Gruß

    Christoph

    Montag, 4. Juli 2011 05:57