Delphi中CoInitialize之探究
来源:互联网 发布:干部网络大学堂 编辑:程序博客网 时间:2024/06/05 05:29
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之探究
- Delphi中CoInitialize之探究
- Delphi中CoInitialize之探究
- Delphi中CoInitialize之探究
- Delphi中CoInitialize之探究
- Delphi中CoInitialize之探究
- Delphi中CoInitialize之探究
- Delphi中提示“尚未调用CoInitialize错误”的解决方法
- Delphi中提示“尚未调用CoInitialize错误”的解决方法
- delphi ADOQuery '尚未调用 CoInitialize。
- Delphi“尚未调用CoInitialize”解决方法
- [Delphi-码农]尚未调用 CoInitialize
- Delphi“尚未调用CoInitialize”解决方法
- Delphi“尚未调用CoInitialize”解决方法
- delphi出现‘尚未调用CoInitialize’异常
- CoInitialize
- CoInitialize
- Coinitialize
- APP UI设计及切图规范
- 2016.12.16回顾
- LeetCode Weekly Contest 13-HammingDistance【易】
- error C2078: 初始值设定项太多;error C2664: 不能将参数 1 从“char”转换为“const char *
- 微信小程序填坑之路(三)--上传头像
- Delphi中CoInitialize之探究
- Sqrt(x)
- IntelliJ IDEA 中 ssh的基本配置
- mobiscroll js日期插件的基本案例
- mybatis-generator扩展教程系列 -- mapper xml文件增加自定义sql
- git: push免输用户名和密码
- Delphi窗体重绘API:DrawFocusRect,SetTextColor(),GetDc,GetWindowDC,MapWindowPoints,InflateRect
- Uploadify IE出现了SCRIPT5007 缺少对象
- 排序算法 - 插入排序