- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在线程中使用 COM 接口(interface)。根据我所读到的内容,我必须在每个线程中调用 CoInitialize/CoUninitialize
。
虽然这工作正常:
procedure TThreadedJob.Execute;
begin
CoInitialize(nil);
// some COM stuff
CoUninitialize;
end;
当我将调用移至构造函数和析构函数时:
TThreadedJob = class(TThread)
...
protected
procedure Execute; override;
public
constructor Create;
destructor Destroy; override;
...
constructor TThreadedJob.Create;
begin
inherited Create(True);
CoInitialize(nil);
end;
destructor TThreadedJob.Destroy;
begin
CoUninitialize;
inherited;
end;
procedure TThreadedJob.Execute;
begin
// some COM stuff
end;
我得到EOleException:CoInitialize尚未被调用异常,我不知道为什么。
最佳答案
CoInitialize
为执行线程初始化 COM。 TThread
实例的构造函数在创建 TThread
实例的线程中执行。 Execute
方法中的代码在新线程中执行。
这意味着,如果您需要 TThreadedJob
线程初始化 COM,则必须在 Execute
方法中调用 CoInitialize
。或者从Execute
调用的方法。下列说法正确的是:
procedure TThreadedJob.Execute;
begin
CoInitialize(nil);
try
// some COM stuff
finally
CoUninitialize;
end;
end;
关于multithreading - TThread 和 COM - "CoInitialize has not been called",尽管在构造函数中调用了 CoInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38962424/
我正在尝试在线程中使用 COM 接口(interface)。根据我所读到的内容,我必须在每个线程中调用 CoInitialize/CoUninitialize 。 虽然这工作正常: procedure
我正在编写一个控制台应用程序,该应用程序将为名为 Client.exe 的主应用程序创建防火墙异常(exception),该应用程序通过 FTP 将一些文档上传到我们的服务器。我从Delphi 7 W
我正在 Delphi XE2 中构建一个多线程 Windows 服务应用程序,它使用 ADO 数据库组件连接到 SQL Server。我用过CoInitialize(nil);在内部线程之前很多次,但
假设我的应用程序在启动时调用 CoInitialize,并在存在之前调用 CoUninitialize。 假设我的应用程序使用了一个第三方组件并执行类似的操作,这会导致某种失败吗? 当调用已经提交时,
假设我的应用程序在启动时调用 CoInitialize,并在存在之前调用 CoUninitialize。 假设我的应用程序使用了一个第三方组件并执行类似的操作,这会导致某种失败吗? 当 CoIniti
这是我的 ThorDetectorSwitch.cpp 文件构造函数的 C++ 代码: ThorDetectorSwitch::ThorDetectorSwitch() : _mcSwitch(__u
自创建以来已经有 16 年了,我仍然不知道为什么 CoInitialize 中有一个保留参数。方法。有谁知道(或能够做出明智的猜测)添加此参数的原因以及预期用途是什么? 最佳答案 这实际上不是为了将来
我使用 UniDac 组件连接到 PostgreSQL。我的查询正在单独的线程中运行。现在,当我在线程中使用 CoInitialize 时,我收到以下编译器错误: - [DCC Error] QryT
在具有ADO数据库连接的多线程环境中,我想知道CoInitialize是否已被调用。我该如何检查这个? 最佳答案 通常情况下,您不应该执行此检查,而只需调用 CoInitialize/CoUnInit
下面的代码,源自https://learn.microsoft.com/en-us/windows/desktop/shell/folder-info#determining-an-objects-p
我有一个 .NET 应用程序,它使用 COM Interop 使用 COM 组件,组件实例化自身,接口(interface)指针在 API cal 中返回到 .net 包装器,稍后在应用程序流程中进行
我在 Delphi 程序的线程内使用 TIdHttp 和 TXMLDocument。现在我想知道: 这些类是否使用 COM 对象,因此我需要在此线程中调用 CoInitialize 和 CoUnini
onecore\com\combase\objact\objact.cxx(812)\combase.dll!00007FF8BD322169: (caller: 00007FF8BD320F78)
我正在学习 Python 中的多线程。我正在查看在线示例,并尝试为远程连接到远程计算机的 WMI 模块尝试多线程。但是,当我使用pythoncom.CoInitialize()时,它给我一个错误,指出
-我的问题 我得到 CoInitialize has not been called exption. -我的项目结构 这是我的问题。我有一个用 C# 开发的 COM dll,MCLWrapper.d
为了学习多线程,我在 COM 线程 (TRemoteDataModule) 中创建了一个线程。 这是我的组件工厂: TComponentFactory.Create(ComServer, TServe
我正在开发一个 UI 应用程序,它会一路创建一个 COM 对象。 问题是,我想将这个 COM 对象完全“移动”到另一个线程上。 我要做的是: 创建我想将对象移动到的新线程(使用 CreateThrea
我有一个 XE2 DataSnap 服务器(Windows 服务),它在其方法中使用第 3 方进程外 COM 组件。作为 COM,我知道它需要在语句周围使用 CoInitializeEx 和 CoUn
我有一个使用 C++ DLL 的 C# Windows 窗体应用程序。在 DLL 中,我初始化 COM: auto hResult = CoInitialize(NULL); // Initializ
COM是否需要初始化才能使用SysAllocString、SysFreeString等BSTR处理函数? MSDN 说 You need to initialize the COM library o
我是一名优秀的程序员,十分优秀!