2009-07-16 5 views
3

Déjà demandé sur l'Evil Exchange, mais comme toujours ce n'était pas une aide. Je vais avoir ce problème aujourd'hui:Erreur de initialisation sur IntraWeb en utilisant ADO

Lors de la création d'une application Web autonome utilisant IntraWeb, je reçois cette exception dans l'EDI lorsque je tente de tester une session de mon application dans le navigateur:

Exception de première chance à 7C812A6B $. Classe d'exception EOleSysError avec message 'CoInitialize n'a pas été appelé '. Processus WebContactManager.exe (1112)

Si je clique sur "continuer" sur la boîte de dialogue d'exception IDE, le navigateur lui-même montre que:

200 OK

... plutôt que les contrôles sur mon formulaire principal.

Cette erreur ne semble pas se produire lorsque je remplace ADO avec d'autres composants de base de données tels que dbExpress ou BDE.

Qu'est-ce que cette erreur me dit, et comment puis-je le réparer?

(Remarque J'utilise les composants IntraWeb "VCL pour le Web" qui sont intégrés avec D2007).

Merci d'avance pour toute aide!

Répondre

7

La "solution" fournie dans the link you quoted est fondamentalement erronée ou au moins incomplète. Ce n'est qu'en définissant ServerController.ComInitialization sur ciMultiThreaded que true que IW garantira que chaque thread obtiendra COM initialisé correctement. (par exemple, pensez aux rappels Ajax)

Si vous créez vos propres threads personnalisés, vous devrez appeler CoInitialize pour ce thread par vos propres moyens - car Intraweb ne connaît pas vos threads personnalisés.

+0

Olaf, merci pour l'entrée. Je ne vois pas d'emplacement pour définir "clMultiThreaded sur true" - uniquement un emplacement pour définir ComInitialization sur clMultiThreaded, clNone ou clNormal. En le définissant à l'ancien résoudre mon problème immédiat, qui ne comportait pas de threads personnalisés. Point noté cependant sur ces (threads personnalisés), et j'ai trouvé quelques informations sur de tels cas, mais ne comprends toujours pas quand et où appeler CoInitialize manuellement. – Jamo

3

Je viens de trouver une réponse à cette here:

Je trouve une solution plus élégante que le problème provenait de l'utilisation Intraweb, je reçois plutôt Intraweb à com me initialiser. Cela trie bien .

Lorsque vous utilisez votre pilote MS SQL DbExpress ou pilote ADO avec Intraweb, vous devez définir la propriété ComInitialization dans le ServerController à « ciMultiThreaded ».

Ceci éliminera l'erreur "CoInitialize n'a pas été appelée".

Questions connexes