2009-07-16 12 views
3

Bereits auf der Evil Exchange gefragt, aber wie immer war das keine Hilfe. Ich habe dieses Problem heute:Fehler in IntraWeb koinzitieren mit ADO

Wenn eine Stand-alone Web-Anwendung mit IntraWeb erstellen, bekomme ich diese Ausnahme in der IDE, wenn ich versuche, eine Sitzung von meiner App im Browser zu testen:

Erste Chance Ausnahme bei $ 7C812A6B. Ausnahmeklasse EOleSysError mit Nachricht 'CoInitialize wurde nicht genannt'. Verfahren WebContactManager.exe (1112)

Wenn ich auf "weiter" auf dem IDE Ausnahme Dialog, der Browser selbst zeigt nur:

200 OK

... eher als die Kontrollen auf meinem Hauptformular.

Dieser Fehler scheint nicht zu auftreten, wenn ich ADO durch andere Datenbankkomponenten wie dbExpress oder BDE ersetzen.

Was sagt mir dieser Fehler und wie behebe ich ihn?

(Hinweis: Ich verwende die "VCL for the Web" IntraWeb-Komponenten, die mit D2007 integriert sind).

Vielen Dank im Voraus für jede Hilfe!

Antwort

7

Die in the link you quoted enthaltene "Lösung" ist grundsätzlich falsch oder zumindest unvollständig. Nur durch das Setzen von ServerController.ComInitialization auf ciMultiThreaded auf True IW wird garantiert, dass jeder Thread COM korrekt initialisiert bekommt. (Denken Sie zum Beispiel an Ajax Callbacks)

Wenn Sie Ihre eigenen benutzerdefinierten Threads erstellen, müssen Sie CoInitialize für diesen Thread selbst aufrufen, da Intraweb nichts über Ihre benutzerdefinierten Threads weiß.

+0

Olaf, danke für die Eingabe. Ich sehe keinen Ort, an dem "clMultiThreaded to true" festgelegt werden kann - nur ein Ort, an dem ComInitialization auf clMultiThreaded, clNone oder clNormal gesetzt wird. Wenn ich es auf das vorherige setze, löste ich mein unmittelbares Problem, das keine benutzerdefinierten Threads beinhaltete. Punkt, obwohl auf diese (benutzerdefinierte Threads) bemerkt, und ich habe einige Informationen über solche Fälle finden, aber immer noch nicht vollständig verstehen, wann und wo CoInitialize manuell aufrufen. – Jamo

3

einfach eine Antwort auf diese here gefunden:

fand ich eine elegantere Lösung als ganze Problem entstand aus Intraweb verwenden, ich eher Intraweb zu initialisieren com für mich bekommen. Dies sortiert es aus.

Wenn Ihr MS SQL DbExpress Treiber oder ADO-Treiber mit Intraweb verwenden, Sie die ComInitialization Eigenschaft im ServerController zu ‚ciMultiThreaded‘ setzen.

Dadurch wird der Fehler "CoInitialize wurde nicht aufgerufen" beseitigt.