问题标签 [atl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - COM 错误 0x80004003(无效指针)访问 MS Outlook 联系人
我是一些 ATL 代码,它使用智能 COM 指针遍历 MS Outlook 联系人,在某些 PC 上,我收到每个联系人的 COM 错误 0x80004003(“无效指针”)。相同的代码在其他 PC 上运行良好。代码如下所示:
我想知道是否有任何其他应用程序/加载项可能导致这种情况?欢迎任何帮助。
c# - 解决一个 COM [out] VARIANT* 包含 parray 作为 C#.net 中 BSTR 的 SAFEARRAY
问题:我有一个带有 IDL 方法的 COM 服务器:
在头文件中,这变为:
实施:
//这里添加了CInternals类来补图
int CInternals::CollectDeviceStrings(CComVariant* pList) { HRESULT hr = S_OK; BOOL bRet = FALSE;HRESULT 小时 = S_OK;
}
在 C# 中的 CS 文件中
关键是“out oResult”对象都不起作用。
欢迎任何建议。
c++ - “班级未注册”是哪个班级?
考虑这段代码:
即我有一段代码可以实例化我的对象。有时(安装错误)它会失败,因为某些类没有正确注册。(我没有特别的问题,在这里进行一般性的讨论。)
有没有办法,从捕获的异常或其他方面,意识到哪个类失败了?A 曾考虑制作一个我自己的包装器,它存储像gLastCreateAttemptUuid这样的变量,但感觉很麻烦。
此外,假设 SomeClass 反过来尝试实例化其他未注册的东西。然后可以找出根本问题吗?
c++ - 在多线程环境中使用 CList
我在多线程环境中使用 CList,但 GetHead 方法一直存在问题。我有一个线程将数据添加到列表中,另一个线程从列表中读取和删除数据。这是阅读部分:
这是插入部分:
这是删除部分
为什么运行时会出现运行时错误。它总是失败
有了这个断言:
而 m_pNodeHead 值为:
- pNext 0x00000000 {pNext=??? 上一页=???数据={...} } CList > >,ATL::CStringT > > &>::CNode *
- pPrev 0x00000000 {pNext=??? 上一页=???数据={...} } CList > >,ATL::CStringT > > &>::CNode *
- 数据 "" TESTSETSE ATL::CStringT > >
c++ - 无法使 ATL 连接点正常工作
我正在尝试使用 ATL 创建一个 COM 组件,并且我想为我的 VB 客户端引发事件。我发现了许多教程,所有这些教程的细节似乎都各不相同,而且似乎都没有生成一个可行的解决方案。这是我正在做的事情:
(使用 Visual Studio 2008):
- 创建一个新的 ATL DLL 项目。我已经调用它了
ATLEventTest
。 - 类视图:右键单击
ATLEventTest
,添加了一个新的 ATL 简单对象类。我称之为这个MyObject
,它产生了CMyObject
,,IMyObject
等等...... 该对象是通过以下方式创建的:a) 单元线程 b) 聚合 c) 双接口 d) ISupportErrorInfo e) 连接点
右键单击
CProxy_IMyObjectEvents<T>
,单击“添加功能”- 函数的返回类型为 void,命名为
someEvent
,并采用int testParam
. - 重建。
(此时,我应该能够在某处看到“实施连接点”。我没有……) - 右键单击
CMyObject
。'添加连接点' - 将“
_IMyObjectEvents
”移到列表中。 - 在我的解决方案中进行了代码搜索。到处都找不到
someEvent
! - 再次添加该
someEvent
功能。现在,它位于 ATLEventTest_i.h - 应该可以调用
fire_someEvent(...)
我的代码,但不能。
这一直让我发疯,试图让它发挥作用。如果有人能看到我做错了什么,我将不胜感激任何更正、提示、黑客等。
在这一点上,我很想说把向导搞砸了,直接尝试修改 c++ 和 idl,但我有一种感觉可能不会更好:(
c++ - SetThreadLocale 和 UTF8
所以我想使用 SetThreadLocale 将线程代码页设置为 UTF8。到目前为止,我一直在使用 atl 字符串转换宏的第二个参数,例如“CT2A(szBUF, CP_UTF8)”来执行此操作。但是我希望能够在开始时使用 SetThreadLocale() 设置一次线程代码页,而不必再次使用转换宏的第二个参数。
我该怎么做呢?SetThreadLocale 不会采用像 CP_UTF8 这样的代码页参数,而只是一个 LCID。我应该提供哪些参数 SetThreadLocale 来实现这一点?
请记住,我没有特别的语言。我得到的字符串可能是日语、韩语、英语等。到目前为止,在将 CP_UTF8 指定为转换宏的第二个参数时,我对这种字符串组合没有任何问题。您可能会问“那么为什么不继续使用第二个参数”。回答,“因为处理代码的团队成员很容易忘记它。如果它能够使用转换宏的默认 1 参数版本正常工作,那就太好了。”
c++ - 错误使用 CComPtr 对象导致的编译错误
我在我的类中定义了以下CComPtr
对象和方法:
在我的类的构造函数中,我mRawPdu
通过初始化列表初始化为 0。如果尚未初始化,则该getRawPdu()
方法使用惰性评估。mRawPdu
编译代码时,出现以下错误:
关于可能导致这种情况的任何建议?
com - 如何从 ATL activex 控件将错误字符串和错误代码返回到 VB6?
我正在尝试使用CComCoClass::Error向 VB6 返回详细错误,但似乎我只能返回错误代码/或/消息 - 但不能同时返回两者。
在 VB6 端的 Err.Description 中导致通用的“方法 'Request' of object 'IMyInterface' failed”错误消息(但 Err.Number 中的 ERROR_CONNECTION_INVALID),而
导致相应的错误消息,但 Err.Number 中的通用错误代码。我怎样才能两全其美?
com - COM MFC ATL值得学习吗?
现在值得学习 COM MFC ATL WTL 吗?