Fragensteller
OLE - Klassen

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 010101100100011001010000011110000101001001101111011000110110101101110011Freitag, 1. Juli 2011 12:08 -
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).aspxWenn 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