问题标签 [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.

0 投票
3 回答
3049 浏览

c++ - ATL 简单对象向导 - “对象 Xxx 已存在”错误

我正在尝试使用Visual Studio 2005 中的ATL 简单对象向导在我的 DLL 中创建一个新的 COM 对象。

我输入对象的短名称,并派生所有其他字段。

但是,当我在向导中单击下一步时,出现以下错误消息:

我在整个解决方案中搜索了对 IXxxInterfaceName 的所有引用,但在任何地方都看不到它的定义。

向导如何确定它已经存在?

0 投票
3 回答
1592 浏览

shell - 调用 MSXML2::IXMLDOMDocumentPtr -> Release() 时 Internet Explorer 崩溃

我正在使用 Visual Studio 2008 在 C++ (ATL 9) 中创建一个外壳扩展。外壳扩展在模块类中创建一个全局 MSXML2::IXMLDOMDocumentPtr 对象 m_XmlDoc。然后所有类在扩展中使用这个 m_XmlDoc 来读取 xml 文档。

我面临的问题是 Internet Explorer。当 Shell 扩展处于活动状态并且我打开/关闭 Internet Explorer 时,我得到一个调试对话框并且 IE 崩溃。错误消息显示“iexplore.exe 中 0x6aac30f1 处的未处理异常:0xC0000005:访问冲突读取位置 0x03050970。” 当我在消息窗口上单击“中断”时,它会将我带到 COM 智能指针的“释放”方法,错误似乎在 m_pInterface->Release();

此调用是从 Module 的析构函数进行的,并且 m_pInterface 的值也不为 NULL。我想也许 Internet Explorer 正在使用 XML DOM,并且对 Release 的调用会在其中产生一些问题。

dll主要代码:

0 投票
2 回答
1708 浏览

c++ - 如何在非托管 ATL GUI 中嵌入 Windows 窗体?

我有一个使 COM 可见的 Windows 窗体用户控件。现在我想将该控件嵌入到 ATL 对话框 GUI 中。

ATL 项目(非托管 C++)只能获取 winform 的 progID 并在运行时动态创建和嵌入它。

这可能吗?如果可以,我该怎么做?

0 投票
2 回答
1345 浏览

c++ - 在 ATL 中将对象作为属性返回

我正在使用 Visual Studio 2008 和 ATL 创建一个 COM 对象。添加简单的属性和方法很容易,但现在我想做一些更复杂的事情。我想通过我的 COM 对象的属性授予对 C++ 对象的访问权限,因此我可以执行以下操作:

因此,aProperty返回对另一个对象的引用,该对象公开了一个名为anotherProperty.

我猜我需要在我的项目中为第二个对象添加另一个简单的 ATL 对象(调用它IClass2),并且在 IDL 中有类似以下内容:

我在正确的轨道上吗?有谁知道这类事情的好教程?

0 投票
1 回答
99 浏览

c++ - CBlobCache 使用 - ATL 服务器库

有人可能有一个使用 CBlobCache 的例子?

0 投票
1 回答
227 浏览

c++ - 为什么我不能在 ATL 对话框中托管的 Winform 中输入文本?

我正在将 winform 控件嵌入到 ATL 对话框中(请参阅此处了解我到目前为止的工作方式)。

现在我遇到了一个相当奇怪的问题。
出于某种原因,我的 winforms 中的文本字段显示正常,但我无法通过在键盘上键入来更改其中的文本。

但是,我可以将文本从其他地方复制并粘贴到文本字段中,然后将其视为正常输入(触发文本更改事件等)。

如何让文本字段正常运行并允许通过键盘输入文本?
有什么提示吗?

0 投票
3 回答
4037 浏览

dll - 如何在 DLL 中使用 WTL?

我正在尝试在进程内 COM 服务器 DLL(IE BHO)中使用 WTL,但我正在努力使用 _Module。

我的 DLL 需求CMyModule来自CAtlDllModuleT<>

但这与大多数 WTL 示例相冲突,后者需要以下内容stdafx.h

无论我采用哪种方式,我(不出所料)都会遇到编译错误。CMyModule源自CAppModuleborks on_Module.DllUnregisterServer()等。CMyModule源自CAtlDllModuleT<>borks on 代码,例如_Module.GetMessageLoop().

关于 WTL 应该如何在 DLL 中工作的任何好的参考资料?谷歌发现很多问题,但答案很少。

0 投票
1 回答
2826 浏览

c# - 无法让 SAFEARRAY 与 Interop 一起工作

我有一个 ATL COM 服务器,接口的方法是

这个函数的 MIDL 看起来像

我使用 tlbimp 从这个项目中导入 tlb,所以我可以使用本机数组。然后我从 C# 调用它如下

其中 Inputs 已经分配并填充了我的 C# 程序内部的另一个 COM 对象。现在,当我调用 C++ 包装器时,我有一个BadPtr用于我的 safearray 并且从后续 COM 对象调用CWrapper::RUN失败,该数组没有进入最终的 dll。它显示为未分配。有谁知道我做错了什么?谢谢

编辑:我应该说该数组在 C# 中看起来很好。

EDIT2:调试器iData显示IDispatch* = 0x0000000 <Bad Ptr>, 5, 0x0000000 <Bad Ptr>({lpvtbl = 0xblahblah},.... 所以看起来我的一些信息正在到达那里。

0 投票
2 回答
873 浏览

c++ - DCOM 服务器调试

我正在学习 DCOM,我需要调试我创建的一个类,我该怎么做?

0 投票
1 回答
776 浏览

c++ - ATL:我想创建一个可用作类中方法的参数的 coclass。为什么我不能让它工作?

我已经使用 ATL 创建了一个 COM 对象。我想创建一个可以从方法返回并作为参数传入的新对象。我已经创建了 coclass,但我不知道如何添加一个接受它作为参数的方法。

我得到的错误是 MIDL2025:语法错误:期待“IgBrush”附近的类型规范。我正在使用 Visual Studio 2008。

当我添加一个枚举时,我记得我玩了很多 IDL,并最终让它接受枚举作为参数。同班同学没有这样的运气。

从 ATL 向导提供的默认生成代码中,需要哪些步骤才能使其工作?(即,我将什么移动到哪里以及为什么?)