- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 .NET 应用程序,它使用 COM Interop 使用 COM 组件,组件实例化自身,接口(interface)指针在 API cal 中返回到 .net 包装器,稍后在应用程序流程中进行调用到 COM 组件。
//Pseudo code
//CLISD_ITEM is a another CoClass housed by this COM component, the component is a STA based dll
HRESULT GetItem(ITem **ptr)
{
HRESULT hr = CoCreateInstance(CLSID_ITEM.....,....(void **) &pItem);
pItem->QI(ptr);
}
我的问题是我是否应该在函数 GetItem 中调用 CoInitialize 和 CoUninitialize(),到目前为止我没有进行这些调用并且代码似乎工作正常,但有报告称调用 CoCreateInstance 时出现间歇性崩溃。
如果有人可以帮助我。
最佳答案
不,CoInitializeEx() 必须始终由线程所有者调用。这从来都不是组件本身,它没有启动线程。只有业主才能确定哪种公寓类型是正确的,因为它需要照顾公寓担保。特别是,STA 线程必须泵送消息循环。组件永远无法提供这种保证。
这在 .NET 应用程序中始终如一地完成,CLR 总是在允许任何托管代码在线程上运行之前调用 CoInitializeEx()。单元类型由启动线程的 Main() 入口点上的 [STAThread] 或 [MTAThread] 选择,Thread.SetApartmentState() 调用工作线程。线程池线程始终加入 MTA。
您需要寻找崩溃的其他原因。
关于c++ - 调用 CoInitialize/CoUnInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432965/
Ansi-C 函数调用 CoUninitialize . 语法是: void CoUninitialize(void); 我看不到任何错误处理选项,如何检查 CoUninitialize 是否成功?
我有一个应用程序,其中创建了一个线程,该线程必须在超时间隔内检查数据库中是否有特定类型的数据。该线程完全负责创建数据库连接、查询和关闭连接。我在线程执行中只调用了一次 CoInitialize,并重用
我有一个 .NET 应用程序,它使用 COM Interop 使用 COM 组件,组件实例化自身,接口(interface)指针在 API cal 中返回到 .net 包装器,稍后在应用程序流程中进行
我正在开发一个 C++ 应用程序来从 Excel 文件中读取一些数据。我已经开始工作了,但我对其中一部分感到困惑。这是代码(简化为仅读取第一个单元格)。 //Mostly copied from ht
我调用 CoInitializeEx,特别是: CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED); 在我的
我有个疑问。我初始化 COM,做 CoCreateInstance 并使用一些接口(interface)。我可以在不调用 Release 的情况下调用 CoUninitialize 吗?它会导致任何内
我正在实现一个包含 a shared ADO Connection 的 DLL通过使用 TADOConnection 的 ConnectionObject 属性并将其跨 DLL 边界传递到 TADOC
IShellDispatch COM 接口(interface)有一个非常奇怪的问题,更具体地说是 FolderItemVerbs 对象,这让我抓狂! 调用 FolderItemVerbs::Rele
下面的代码生成一个线程,该线程等待 5 秒,然后(递归地)遍历前台应用程序中的所有可访问项(小部件)。 如果(在 5 秒延迟期间)我切换到 Windows 10 Metro 应用程序(如 Calc 或
我有这样一个函数: bool op1(); bool op2(); bool foo() { CoInitialize(nullptr); if (!op1()) { CoUninit
我正在尝试创建一个在 python 3.4 中创建一个函数,该函数将对服务器执行 ping 操作。目前它只需要在 Windows 上工作(可能是 XP 及更高版本)。 我发现我可以使用 WMI Win
我已经在项目中构建并包含了 RtAudio 库,但是当我尝试构建项目本身时,出现错误: RtAudio.cpp:-1: error: undefined reference to `CoInitial
CoInitialize(NULL) 和 CoUninitialize() 是否由 ATL 自动调用? 或者我仍然必须在 COM 应用程序的开头和结尾分别调用 CoInitialize(NULL) 和
我是一名优秀的程序员,十分优秀!