我们有一个用Delphi 6 websnap编写的当前产品,我试图升级到在delphi 2005下运行.它使用ADO,运行时的错误是"CoInitialize尚未被调用".我可以找到这个错误的唯一引用指向IntraWeb和一个叫做ServerController的东西,我不确定它与我有关.任何数量的CoInitialize(nil)调用都没有效果.
我是在浪费时间让它运行,还是可以在2005年之前运行 - 或者是后来发布的那个?
CoInitialize需要在执行COM访问的线程内调用(例如,在通过ADO访问数据库的任何线程中).它在默认情况下由Delphi在主线程中调用,但您需要在其他线程中显式调用它.
尝试调用它的OnActivate事件,并调用CoUninitialize的OnDeactivate事件.
还要确保您的ADOTables和ADOConnections在设计时未打开.否则,应用程序将在您调用之前尝试使用COM CoInitialize.
如果所有其他方法都失败了 - 尝试覆盖Web表单的构造函数并CoInitialize在调用继承之前将其放入其中.不要忘记CoUninitialize在析构函数中调用.