delphi 在多线程中使用 CreateOleObject 导致失败(一定要使用CoInitialize和CoUninitialize,举例查询WMI)
2024-08-31 23:45:16
原帖地址
http://bbs.csdn.net/topics/390481350
解决办法
- procedure DisplayVideoInfo;
- var
- wmi, objs, obj : OleVariant;
- enum : IEnumVariant;
- value : Cardinal;
- begin
- try
- CoInitialize(nil);// 加上这两句
- wmi := CreateOleObject('WbemScripting.SWbemLocator');
- // ConnectServer无参表示连接本机
- objs := wmi.ConnectServer()
- .ExecQuery('SELECT * FROM Win32_VideoController');
- enum := IUnknown(objs._NewEnum) as IEnumVariant;
- enum.Reset;
- // 扫描每一块显卡
- while enum.Next(1, obj, value) = S_OK do
- begin
- szString.Add('名称 :' + obj.Name);
- szString.Add('制造商 :' + obj.AdapterCompatibility);
- szString.Add('芯片类型 :' + obj.VideoProcessor);
- szString.Add('DAC类型 :' + obj.AdapterDACType);
- szString.Add('显存 :' +
- VarToStr(Round(obj.AdapterRAM / 1024 / 1024)) + 'MB');
- szString.Add('颜色 :' + VarToStr(obj.CurrentBitsPerPixel) + '位');
- szString.Add(Format('屏幕分辨率是:%d * %d', [Screen.Width, Screen.Height]));
- end;
- finally
- CoUninitialize();//加上这两句
- end;
- end;
http://blog.csdn.net/warrially/article/details/11974729
最新文章
- Abp集成Swagger的最佳实践
- StringUtils中 isNotEmpty 和isNotBlank的区别
- ORACLE OLAP错误ORA-06512: at ";SYS.OLAPIHISTORYRETENTION";
- Windows下elasticsearch插入数据报错!
- (原创)在service中定时执行网络操作的几点说明
- [转] 多线程 《深入浅出 Java Concurrency》目录
- 开发成功-cpu-mem监控动态折线图--dom esayui js java
- sql批量删除wordpress所有日志修订revision
- LibreOffice连接orcle 11g
- 解读sample1
- SQL Server 执行计划重编译的两大情况
- uva 12171 hdu 1771 Sculpture
- 利用KVO监视一个view的frame
- spring jdbc 源码
- java HTTP请求 DefaultHttpClient is deprecated
- 两个input在同一行连着不留缝隙
- Technocup 2019 - Elimination Round 1
- Kuro and Walking Route CodeForces - 979C (树上DFS)
- 洛谷P1904
- 推荐一本写给IT项目经理的好书
热门文章
- 【BZOJ 1021】[SHOI2008]Debt 循环的债务
- [GeekBand] C++ 内存分布—— new和delete重载的实现及分析
- windows 系统本地做mysql 主从同步,最后面解决主从同步库名不一致,表结构一致
- dzone Cloud Zone
- 多线程中的lock,Monitor.Wait和Monitor.Pulse
- repo/git Android/CyanogenMod srouce code
- 【转】NIO与传统IO的区别
- Windows下安装MySQL(解压版本)
- python 教程 第七章、 数据结构
- 【Linux计划】XSI IPC