- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 UI 在调用 CoInitialize()
的 DLL 中提供,因此我可以使用 Common Item Dialog、shell 打开文件夹对话框。以及任何其他可能需要 COM 的仅适用于 Vista 的新东西(我不知道/还没有使用任何其他东西)。 DLL 还将为自定义控件提供一个 UI Automation 接口(interface)(我的 Table 控件来自过去的问题,我决定将其移至 UI Automation)。
我不想COM's "helpful" exception handling ;我希望我的 DLL 中的异常冒泡到 DLL,以便可以调试它们。然而,the documentation for IGlobalOptions说我需要事先调用 CoInitializeSecurity()
。
我有两个问题:
我是否调用 CoInitializeSecurity()
来代替 CoInitialize()
或与 CoInitialize()
一起调用?如果除了,我是在之前还是之后调用它?
如果我希望 COM 表现得好像我根本没有调用 CoInitializeSecurity()
,调用会是什么?阅读 MSDN 后,我知道大部分参数应该是什么,但我不确定其中的一些参数。
CoInitializeSecurity(
NULL,
-1, // or is the default 0 instead?
/* can this be NULL? (the error returns table on MSDN implies it can...) if not, what should I specify? */,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
/* what should this be? MSDN says RPC_C_IMP_LEVEL_DEFAULT isn't allowed */,
/* can this be NULL? if not, what should I specify? */,
/* what should this be? MSDN says EOAC_DEFAULT isn't allowed */,
NULL);
或者这在安全方面和默认方面都是完全错误的,还有更好的选择吗?
或者因为这是一个 DLL,我什至不应该做任何这些事情吗?
谢谢。
最佳答案
PS:我假设您的库不包含实际的 main()
代码。
My UI is provided in a DLL that calls CoInitialize()...
我希望您在自己的线程中执行此操作,否则您是在自找麻烦。
- Do I call CoInitializeSecurity()...
不要在库中执行此操作,这是一个进程范围的调用,它可能由应用程序本身完成,或者在第一次发生跨单元编码时完成。
- What would the invocation be...
我会说 this is it , 如果没有找到注册表信息。引用:
CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,
NULL, EOAC_NONE, NULL);
Or is this completely wrong both security-wise and defaults-wise and there's a better option?
有更好的选择。
一种是返回构造的 HRESULT 并将您的实际错误描述存储在您的 DLL 的全局变量之一中,可能使用线程本地存储。
如果您正在使用 ATL,您可能会使用这样的 HRESULT 并最终使用与您提供给 CComCoClass::Error
方法的相同信息,您的对象很可能将其用作模板继承。
或者只使用 ATL 的错误处理,这可能就足够了,因为您仍然可以为自己的代码断点。
Or should I not even bother doing any of this since this is a DLL?
它实际上取决于线程所有权。如果您拥有发生这种情况的线程,那没关系;如果不是,那显然是错误的。
但请考虑像我建议的那样的替代方案。
关于c - 我如何正确使用 CoInitialize() 和 CoInitializeSecurity() 就好像我没有调用后者以便我可以使用 IGlobalOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560589/
在引用此文档pressable docs之后,我将Pressable用于按钮 现在,我想向按钮添加波纹效果,但是它无法正常工作。 Button 如果按钮具有
在 C# 中,我想制作“智能”枚举,这在 Java 中是可能的,其中有更多信息附加到枚举值,而不仅仅是底层 int。我偶然发现了一个创建类(而不是枚举)的方案,如以下简单示例所示: public se
当执行 git stash 时,会创建 2 个提交。一个被 stash ref 引用并且有 2 个父提交。一位 parent 是我们 stash 地点的索引。另一方拥有我们 stash 的实际内容。
我是一名优秀的程序员,十分优秀!