CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线程模式。参数必须为NULL。这是关于OLE和COM的问题。

CoInitializeEx(LPVOID),新版本,可以用参数指定协同模式,如多线程模式,但注意单元的协同模式是不能改的,如果在已经初始化为多线程的单元里初始化OLE将失败并返回RPC_E_CHANGED_MODE。每个线程只要调用一次初始化就够了,同一线程中的后续调用也将通过,但会返回S_FALSE。后面解除初始化调用要与本调用一一对应,返回S_FALSE的CoInitialize调用也计算在内。应用程序的第一个线程将调用CoInitializeEx(COINIT_APARTMENTTHREADED或0),必须是最后一个解除初始化的。如果不按上面的顺序进行初始化/解除函数调用,在该单线程单元(STA)里后续的初始化调用将失败,应用程序将无法工作。由于无法控制本地服务器的载入/御载顺序,在DLLMain里调用初始化/解除函数是不安全的。

例:

1)在DLL中使用ADO数据库组件时,调用程序调用该DLL时会出现”尚未调用CoInitialize”错误,解决的办法是在程序初始化时调用CoInitialize(nil)方法。

initialization CoInitialize(nil);

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} finalization CoUninitialize; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

2) 把WebBrowser封装到Dll里面调用的时候总是说“尚未调用 CoInitialize。”,”CoInitialize has not been called”或“尚未调用 CoInitialize。”的解决方法。

用TWebBrowser显示HTML文档时或者把WebBrowser封装到Dll里面调用的时候总是说“尚未调用 CoInitialize。”,解决方法: 在“开始 -> 运行”中输入 regsvr32 shdocvw.dll 然后在uses 中加入ActiveX,老版本的加入OLE2;

uses ActiveX, // 确认加入这个单元 // 老版本的Delphi用 OLE2 代替 Windows;

initialization CoInitialize(nil); // 手动调用 CoInitialize()

finalization CoUnInitialize; // 释放内存

end.

Delphi中 CoInitialize和 OleInitialize有什么区别

CoInitialize————- COM对象

OleInitialize ———– OLE对象

COM库:CoInitialize{Ex}、CoUnitialize OLE系统:OleInitialize、OleUnitialize

COM对象和OLE对象有什么不同呢?是不是COM是OLE的子集?

OLE是COM的前身,MS现在已经全部转道COM上了,应该现在不发展OLE

如果是使用多线程的话那就在

Execute事件的开头加上

CoInitialize(nil)

结尾加上

CoUninitialize()

Delphi中CoInitialize之探究的更多相关文章

  1. Delphi中String类型原理介绍

    Delphi中字符串的操作很简单,但幕后情况却相当复杂.Pascal传统的字符串操作方法与Windows不同,Windows吸取了C语言的字符串操作方法.32位Delphi中增加了长字符串类型,该类型 ...

  2. delphi中我用定时器每隔一段时间执行操作

    delphi中,我用定时器每隔一段时间执行数据库插入及更新工作!adoquery.close;adoquery.sql.cleare;adoquery.connection:=con1;adoquer ...

  3. Delphi中stringlist分割字符串的用法

    Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...

  4. delphi中exit,abort,break,continue 的区别

    from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...

  5. Delphi中使用比较少的一些语法

    本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...

  6. 如何在 Delphi 中静态链接 SQLite

    搞了我几个小时,终于成功在 Delphi 中静态链接了 SQLite (v3.5.4),下一步就是研究加密了,呵呵中间其实遇到很多问题,今天累了,就不说了,改天补上 下载测试工程 下面说说方法 1.当 ...

  7. 翻箱倒柜,《Delphi中建议使用的语句》

    (*//标题:Delphi中建议使用的语句整理:Zswang连接:http://www.csdn.net/Expert/TopicView1.asp?id=724036日期:2002-06-22支持: ...

  8. delphi中break,continue, exit,abort, halt, runerror的异同

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...

  9. delphi中midas是什么

    Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?   MIDAS(Multitiered Distributed Application Services)多层分布式应用服务.   Del ...

随机推荐

  1. SET Statements (Transact-SQL)

    The Transact-SQL programming language provides several SET statements that change the current sessio ...

  2. 在定位中,如何清除已经设置好的bottom

    这个东西其实很简单,将bottom设auto,便可在设置top的值,那么具体的应用是什么?目前一个是用于全屏,二是用于输入框在手机端的下半屏(被输入发遮挡问题)? 例子如下 css代码: * { ma ...

  3. CSS:CSS定位和浮动

    CSS2.1规定了3种定位方案 1.Normal flow:普通流(相对定位 position relative.静态定位 position static) 普通流(normal flow,国内有人翻 ...

  4. 第十篇 Replication:故障排除

    本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文. 复制故障排除是一项艰巨的任务.在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题.Th ...

  5. BCP及自增标识列

    10:58 2012-12-20 通过BCP命令导入导出数据 bcp "test.dbo.lxy133" out d:\lxy133.txt -SMSSQL$SQL08R2 -Us ...

  6. 导出iPhone中安装的APP的iPA文件

    1.让iPhone连接电脑,打开iTunes,选择本电脑,然后点立即备份. 2.完成上一步的操作之后,选择应用,在iTunes中就会列出你从App Store中下载的应用,自己连接真机调试的应用是没有 ...

  7. log4j 异步日志问题分析

    1. 常用的DailyRollingFileAppender与RollingFileAppender是否同步? 1.1 代码分析 2. log4j 1.2.x提供了异步appender是什么?Asyn ...

  8. 抽取AWR数据

    使用$ORACLE_HOME/rdbms/admin/awrextr.sql $ sqlplus '/as sysdba' SQL*Plus: Release Production on Fri No ...

  9. dlopen、dlsym和dlclose的使用

    在dlopen()函数以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程.使用dlclose()来卸载打开的库. dlopen: dlopen() The function ...

  10. 在Swift中整数以及浮点的格式化

    1 整数的格式化 有的时候我们需要将整数输出为类似01,02,001,002这样的格式. 那么在swift中我们可以这样写 let i= let str = String(format:"% ...